PAT 1059. Prime Factors (25)
1059. Prime Factors (25)
Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1^k1 * p2^k2 *…*pm^km.
Input Specification:
Each input file contains one test case which gives a positive integer N in the range of long int.
Output Specification:
Factor N in the format N = p1^k1 * p2^k2 *…*pm^km, where pi's are prime factors of N in increasing order, and the exponent ki is the number of pi -- hence when there is only one pi, ki is 1 and must NOT be printed out.
Sample Input:97532468Sample Output:
97532468=2^2*11*17*101*1291
以下算法可以改进为比3大的可以直接加2,忽略偶数
1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 int main() 7 { 8 vector<int> factors, radix; 9 long factor = 2; 10 long num; 11 cin >> num; 12 cout << num << "="; 13 if (num == 1) 14 { 15 cout << 1; 16 return 0; 17 } 18 while (num != 1) 19 { 20 int cnt = 0; 21 if (num % factor == 0) 22 factors.push_back(factor); 23 while (num%factor == 0) 24 { 25 cnt++; 26 num /= factor; 27 } 28 if (cnt!=0) 29 radix.push_back(cnt); 30 factor++; 31 } 32 33 for (int i = 0; i < factors.size() - 1; i++) 34 { 35 cout << factors[i]; 36 if (radix[i]>1) 37 cout << "^" << radix[i]; 38 cout << "*"; 39 } 40 cout << factors.back(); 41 if (radix.back() > 1) 42 cout << "^" << radix.back(); 43 }