티스토리 뷰
프로그램 명: 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
- readme.md
- 추상화
- Multimedia
- 리눅스
- 크롤링
- 평창
- Class
- 우분투
- Encapsulation
- 다형성
- Polymorphism
- 마크다운
- 객체지향
- abstraction
- media
- OOP
- Video
- 파이선
- 클래스
- 동계
- player
- Android
- Linux
- ContentResolver
- 입장권
- Object Oriented Programming
- markdown
- ubuntu
- 캡슐화
- 올림픽
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
글 보관함