PAT A1059. Prime Factors (25)

来源:互联网 发布:centos 6.5 配置yum 编辑:程序博客网 时间:2024/06/14 09:16

1059. Prime Factors (25)

时间限制
100 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
思路分析:

打印从1到sqrt(n)的素数表,然后存在prime中,挨个确认是不是n的质因数并确定其个数。最后确定是否有大于sqrt(n)的质因数。

题解:

#include <cstdio>#include <algorithm>#include <cmath>using namespace std;const int MAX = 100000;int n, range, prime[MAX] = {0}, num = 0;bool isprime[MAX] = {false};//表示是素数 struct Factor{int x, cnt;}fac[20];void print_prime(){isprime[1] = true;range = floor(sqrt(n));for(int i = 2; i <= range; i++){if(!isprime[i]){for(int j = i + i; j <= range; j += i){isprime[j] = true;}}}}int main(){scanf("%d", &n);int m = n;if(n == 1){printf("1=1");return 0;} print_prime();for(int i = 1; i <= range; i++){if(isprime[i] == false){prime[num++] = i;}}int fnum = 0;for(int i = 0; i < num; i++){if(n % prime[i] == 0){fac[fnum].x = prime[i];fac[fnum].cnt = 0;while(n % prime[i] == 0){n /= prime[i];fac[fnum].cnt++;}fnum++;}if(n == 1) break;}if(n > 1){fac[fnum].x = n;fac[fnum++].cnt = 1;}printf("%d=", m);for(int i = 0; i < fnum; i++){printf("%d", fac[i].x);if(fac[i].cnt > 1) printf("^%d", fac[i].cnt);if(i != fnum-1) printf("*");}return 0;}





原创粉丝点击