当前位置: 代码迷 >> 综合 >> PAT甲级-1059 Prime Factors (25分)
  详细解决方案

PAT甲级-1059 Prime Factors (25分)

热度:25   发布时间:2023-09-26 23:15:57.0

点击链接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;
}