点击链接PAT甲级-AC全解汇总
题目:
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
- 1
Sample Output:
97532468=2^2*11*17*101*1291
- 1
题意:
质因数分解
算法笔记的代码:
#include
#include
const int maxn=10000;
struct factor {
int x,cnt=0;
} fac[10];
bool isprime(int n) {
if(n<=1)
return false;
int sqr=(int) sqrt(n);
for(int i=2; i<=sqr; i++) {
if(n%i==0)
return false;
}
return true;
}
int prime[maxn]= {0},num=0;
void find_prime() {
for(int i=2; i<maxn; i++) {
if(isprime(i))
prime[num++]=i;
}
}
int main() {
find_prime();
int n;
int k=0;
scanf("%d",&n);
if(n==1)
printf("1=1");
else {
printf("%d=",n);
while(!isprime(n)&&n>1) {
for(int i=0; i<num; i++) {
if(n%prime[i]==0) {
fac[k].x=prime[i];
while(n%prime[i]==0) {
n/=prime[i];
fac[k].cnt++;
}
k++;
}
if(n==1)
break;
}
}
if(n!=1) {
fac[k].x=n;
fac[k++].cnt=1;
}
for(int i=0; i<k; i++) {
printf("%d",fac[i].x);
if(fac[i].cnt>1) {
printf("^%d",fac[i].cnt);
}
if(i<k-1)
printf("*");
}
}
return 0;
}
- 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
评论记录:
回复评论: