1059. Prime Factors (25)

来源:互联网 发布:多线程编程 编辑:程序博客网 时间:2024/06/14 09:15

1059. Prime Factors (25)

时间限制
50 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
HE, Qinming

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:
97532468
Sample Output:
97532468=2^2*11*17*101*1291

先生成素数表,然后从表格中逐个检查是否有素数

#include <cstdio>#include <cmath>#include <cstring>using namespace std;int table[100000];int factor[100000];void primeTable(int up){memset(table,1,sizeof(int)*100000);table[0] = table[1] = 0;for(int i=2;i<=sqrt(up);i++){if(table[i] == 0)continue;for(int j=i;i*j<=up;++j){table[i*j] = 0;}}return ;}int main(){int n, sqrt_n;int flag = 0;scanf("%d",&n);printf("%d=",n);if(n == 1)printf("1\n");sqrt_n = int(sqrt(n));primeTable(sqrt_n);/*for(int i=0;i<sqrt_n;i++){if(table[i])printf("%d ",i);}*/for(int i=2;i<=sqrt_n;i++){if(table[i] == 0)continue;while(n%i == 0){factor[i]++;n/=i;}if(n==1)break;}for(int i=2;i<=sqrt_n;i++){if(factor[i]){if(flag)printf("*");printf("%d",i);flag = 1;}if(factor[i] > 1)printf("^%d",factor[i]);}if(n != 1){if(flag)printf("*");printf("%d",n);}return 0;}


0 0
原创粉丝点击