PAT-A1059. Prime Factors (25(素数)

来源:互联网 发布:超级卡司是真是假 知乎 编辑:程序博客网 时间:2024/06/05 05:51
注意2、3这种情况,还有下边分开的两块。#include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>#include <cmath>using namespace std;#define MAX 10000+10int prime[MAX], pnum = 0;bool p[MAX];struct Factor{int x;int cnt;}factor[MAX];int isPrime(int n){if (n <= 1)return 0;else{int sqr = sqrt(1.0*n);for (int i = 2; i <= sqr; i++){if (n%i == 0)return 0;}return 1;}}void Find_Prime(){for (int i = 2; i < MAX; i++){if (isPrime(i)){prime[pnum++] = i;p[i] = true;}}}int main(){freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);int n = 0, fnum = 0;Find_Prime();scanf("%d", &n);if (1 == n)printf("1=1");else{int sqr = sqrt(1.0*n);printf("%d=", n);
for (int i = 0; i < pnum && prime[i] <= sqr; i++ )
{int t = fnum;if (n%prime[i] == 0){factor[fnum].x = prime[i];factor[fnum].cnt = 0;t++;}while (n%prime[i] == 0){factor[fnum].cnt++;n /= prime[i];} fnum = t;}
if (n > 1){factor[fnum].x = n;factor[fnum].cnt = 1;fnum++;} 
for (int i = 0; i < fnum; i++){printf("%d", factor[i].x);if (factor[i].cnt != 1)printf("^%d", factor[i].cnt);if (i != fnum-1)printf("*");}}return 0;}

0 0
原创粉丝点击