点击链接PAT甲级-AC全解汇总
题目:
Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p?1?? ?k?1?? ?? ×p?2?? ?k?2?? ?? ×?×p?m?? ?k?m??
?? .
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 =
p?1?? ^k?1?? *
p?2?? ^k?2?? *
…*
p?m?? ^k?m?? , where p?i?? 's are prime factors of N in increasing order, and the exponent k?i?? is the number of p?i?? – hence when there is only one p?i?? , k?i?? is 1 and must NOT be printed out.
Sample Input:
97532468
Sample Output:
97532468=2^2*11*17*101*1291
题意:
质因数分解
算法笔记的代码:
#include<cstdio>
#include<math.h>
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;
}