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 = p1k1×p2k2×⋯×pmkm.
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:
97532468
Sample Output:
97532468=2^2*11*17*101*1291
# include <iostream>
# include <cstdio>
# include <cmath>
using namespace std;
const int MAXN = 1e5;
int plist[MAXN], pnum = 0;
struct zyz{
int p, c;
}prime[10];
bool is_prime(int n){
if(n == 1) return false;
int sqr = sqrt(1.0 * n);
for(int i = 2; i < sqr; i++){
if(n % i == 0)
return false;
else return true;
}
}
void Find_prime(){
for(int i = 2; i < MAXN; i++){
if(is_prime(i))
plist[pnum++] = i;
}
}
int main(){
// freopen("C:\\1.txt", "r", stdin);
Find_prime();
int n, num = 0;
scanf("%d", &n);
if(n == 1){
printf("1=1");
return 0;
}
printf("%d=", n);
int sqr = sqrt(1.0 * n);
for(int i = 0; i < pnum && plist[i] < sqr; i++){
if(n % plist[i] == 0){
prime[num].p = plist[i];
prime[num].c = 0;
while(n % plist[i] == 0){
prime[num].c++;
n /= plist[i];
}
num++;
}
if(n == 1) break;
}
if(n != 1){
prime[num].p = n;
prime[num++].c = 1;
}
for(int i = 0; i < num; i++){
if(i > 0) printf("*");
printf("%d", prime[i].p);
if(prime[i].c > 1)
printf("^%d", prime[i].c);
}
return 0;
}