PAT 1059. Prime Factors (25)
http://www.patest.cn/contests/pat-a-practise/1059
1 #include<cstdio> 2 #include<cstring> 3 4 using namespace std; 5 6 const int MAXN = 100000; 7 int prime[MAXN]; 8 bool vis[MAXN]; 9 int plen = 0; 10 11 void mklist() { 12 memset(vis, 0, sizeof(vis)); 13 for (int i = 2; i * i < MAXN; ++i) { 14 if (!vis[i]) { 15 for (int j = i * i; j < MAXN; j += i) vis[j] = true; 16 } 17 } 18 for (int i = 2; i < MAXN; ++i) if (!vis[i]) prime[plen++] = i; 19 } 20 21 int flen = 0; 22 int fac[MAXN][2]; 23 void split(long long n) { 24 for (int i = 0; i < plen && prime[i] <= n; ++i) { 25 if (n % prime[i] == 0) { 26 fac[flen][0] = prime[i]; 27 fac[flen][1] = 0; 28 while(n % prime[i] == 0) { 29 ++fac[flen][1]; 30 n /= prime[i]; 31 } 32 ++flen; 33 } 34 } 35 if (n != 1) { 36 fac[flen][0] = n; 37 fac[flen++][1] = 1; 38 } 39 } 40 41 void print(int i) { 42 if (i > 0) putchar('*'); 43 if (fac[i][1] > 1) 44 printf("%d^%d", fac[i][0], fac[i][1]); 45 else printf("%d", fac[i][0]); 46 } 47 48 int main() { 49 mklist(); 50 long long n; 51 scanf("%lld", &n); 52 if (n == 1) { 53 printf("1=1\n"); 54 return 0; 55 } 56 split(n); 57 printf("%lld=", n); 58 print(0); 59 for (int i = 1; i < flen; ++i) { 60 print(i); 61 } 62 puts(""); 63 return 0; 64 }

浙公网安备 33010602011771号