0%

PAT A1059 Prime Factors

我的解法

解题思路:首先先求出素数表,然后,定义一个结构体factor,存放该数n的质因数的素数部分和指数部分。用n除以素数表得出该数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <cstdio>
#include <cmath>

typedef long long ll;
const int maxn=100000;
const int pnum=500;
int prime[pnum],num=0;
bool p[maxn]={false};
ll n;

struct factor{
int x,cnt;
}fac[10];

void Find_Prime(int n1){
for(int i=2;i<maxn;i++){//注意此处不能用i*i
if(!p[i]){
prime[num++]=i;
if(num>=n1) break;
for(int j=i+i;j<maxn;j+=i){
p[j]=true;
}
}
}
}

int main(){
Find_Prime(pnum);
scanf("%lld",&n);
// for(int i=0;i<pnum;i++){
// printf("i=%d:%d\n",i,prime[i]);
// }
ll m=n;
int fnum=0;
for(int i=0;i<pnum&&prime[i]<=(int)sqrt(1.0*n);i++){
if(n%prime[i]==0){
fac[fnum].x=prime[i];
fac[fnum].cnt=0;
while(n%prime[i]==0){
fac[fnum].cnt++;
n/=prime[i];
}
fnum++;
}
if(n==1) break;//等于一的话直接中断循环
}

if(n!=1){//如果没有被根号n以内的质因子除尽
fac[fnum].x=n;//那么一定只有一个大于根号n的质因子
fac[fnum++].cnt=1;
}

if(m==1) printf("1=1");
else{
printf("%lld=",m);
for(int i=0;i<fnum;i++){
if(i>0) printf("*");
printf("%d",fac[i].x);
if(fac[i].cnt>1) printf("^%d",fac[i].cnt);
}

}

return 0;
}

本文标题:PAT A1059 Prime Factors

文章作者:GavinYGM

发布时间:2020年08月18日 - 15:08

最后更新:2020年08月18日 - 15:08

原始链接:http://www.gavinygm.cn/2020/08/18/PAT-A1059-Prime-Factors/

许可协议: 转载请保留原文链接及作者。