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 <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 100010;
int prime[maxn], pNum = 0;
bool is_prime(int n){//判断n是否为素数
if(n == 1){
return false;
}
int sqr = (int)sqrt(1.0 * n);
int i;
for(i = 2; i <= sqr; i++){
if(n % i == 0){
return false;
}
}
return true;
}
void Find_Prime(){//素数表
int i;
for(i = 1; i < maxn; i++){
if(is_prime(i) == true){
prime[pNum++] = i;
}
}
}
struct factor{
int x;
int cnt;
}fac[10];
int main(){
Find_Prime();
int n;
while(scanf("%d", &n) != EOF){
int num = 0;
int i;
if(n == 1){
printf("1=1");
}
else{
printf("%d=", n);
int sqr = (int)sqrt(1.0 * n);
for(i = 0; i < pNum; i++){
if(n % prime[i] == 0){//prime[i]是n的因子
fac[num].x = prime[i];
fac[num].cnt = 0;
while(n % prime[i] == 0){//计算prime[i]的个数
fac[num].cnt++;
n = n / prime[i];
}
num++;
}
if(n == 1){
break;
}
}
if(n != 1){//有一个大于根号n的质因子
fac[num].x = n;
fac[num].cnt = 1;
}
}
for(i = 0; i < num; i++){
if(i > 0){
printf("*");
}
printf("%d", fac[i].x);
if(fac[i].cnt > 1){
printf("^%d", fac[i].cnt);
}
}
}
return 0;
}