티스토리 뷰
프로그램 명: decomp(open)
제한시간: 1 초
자연수 n 이 입력으로 주어진다. 이 수를 소인수 분해하는 프로그램을 작성하시오.
입력
n 은 2 이상 1 000 000 000 이하의 자연수이다.
출력
소인수를 크기 순으로 공백을 사이에 두고 한 줄에 출력한다.
입출력 예
입력 20 출력 2 2 5 입력 7 출력 7
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 #include <iostream>#include <math.h>#define MAX 10000000using namespace std;int index[MAX];bool isPrime(long long num) // 소수 판변 함수{for(int i=2; i <= sqrt(double(num)); i++){if(index[i]) continue;else if(num % i == 0) return false;}return true;}void func(long long num){for(long long i=2; i<=num; i++){if(i < MAX) { // 천만까지는 체로 걸러냅니다.if(index[i]) continue;}else{if(isPrime(num)){ // 그 이상은 소수 판별을 따로 합니다cout << num << ' ';break;}if(!isPrime(i)) continue;}while(num % i == 0){cout << i << ' ';num /= i;}}cout << endl;}void preProc() // 에라토스테네스의 체를 구합니다.{for(long long i=2; i<MAX; i++){if(index[i]) continue;long long cur = 2;while((cur * i) < MAX)index[(cur++) * i] = 1;}}int main(){long long n;preProc();cin >> n;func(n);}
조금 어거지로 푼거 같아 좀 찝찝합니다. 4단계 문제인데 에라토스 테네스가 필요할까요...
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- markdown
- OOP
- player
- Object Oriented Programming
- 클래스
- abstraction
- Linux
- ubuntu
- media
- readme.md
- 올림픽
- Video
- 캡슐화
- Encapsulation
- 크롤링
- 리눅스
- ContentResolver
- 추상화
- 평창
- 입장권
- 다형성
- Polymorphism
- Class
- Multimedia
- 마크다운
- 동계
- 파이선
- 우분투
- 객체지향
- Android
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함