PAT1059. Prime Factors

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

Sample Output:

97532468=2^2*11*17*101*1291思路:此题真是受益匪浅,首先需要观察素数表的打印,然后通过建立结构体进而来存储因子,而结构体中还可以存储数字。另外特殊的情况需要进行考虑。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 using namespace std;
 5 #define MAX 100010
 6 struct Fraction
 7 {
 8     int num;
 9     int cnt;
10 } Frac[10];
11 bool Judge(int a)
12 {
13     if(a<=1)
14       return false;
15     int sqr= sqrt(a*1.0);
16     for(int i=2;i<=sqr;i++)
17     {
18         if(a%i==0)
19           return  false;
20     }
21     return true;
22 }
23 int prime[MAX];
24 void Init()
25 {
26
27     //需要打印素数表
28     int npt=0;
29     for(int i=2;i<MAX;i++)
30     {
31         if(Judge(i))
32           prime[npt++]=i;
33     }
34 }
35 int main(int argc, char *argv[])
36 {
37     int n;
38     scanf("%d",&n);
39     printf("%d=",n);
40     Init();
41     int i=0;
42     int pt=0;
43     if(n==1)
44     {
45         printf("1\n");
46         return 0;
47     }
48     int sqr=sqrt(1.0*n);
49     for(int i=0;i<MAX&&prime[i]<=sqr;i++)
50     {
51         if(n%prime[i]==0)
52         {
53             Frac[pt].num=prime[i];
54             Frac[pt].cnt=0;
55             while(n%prime[i]==0)
56             {
57                 Frac[pt].cnt++;
58                 n/=prime[i];
59             }
60             pt++;
61         }
62     }
63     for(int i=0;i<pt;i++)
64     {
65         if(Frac[i].cnt!=0)
66         {
67             printf("%d",Frac[i].num);
68             if(Frac[i].cnt!=1)
69             {
70                 printf("^%d",Frac[i].cnt);
71             }
72             if(i!=pt-1)
73                 putchar(‘*‘);
74                else if(n==1)
75                  putchar(‘\n‘);
76         }
77     }
78     if(n>1)
79     {
80         printf("%d\n",n);
81     }
82     return 0;
83 }

时间: 2025-01-07 08:15:57

PAT1059. Prime Factors的相关文章

pat1059. Prime Factors (25)

1059. Prime Factors (25) 时间限制 50 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HE, Qinming 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 Specificatio

[CareerCup] 7.7 The Number with Only Prime Factors 只有质数因子的数字

7.7 Design an algorithm to find the kth number such that the only prime factors are 3,5, and 7. 这道题跟之前LeetCode的那道Ugly Number II 丑陋数之二基本没有啥区别,具体讲解可参见那篇,代码如下: class Solution { public: int getKthMagicNumber(int k) { vector<int> res(1, 1); int i3 = 0, i

PAT 1059. Prime Factors (25)

1059. Prime Factors (25) 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 inte

1059. Prime Factors (25)

时间限制 50 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HE, Qinming 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 contain

2014辽宁ACM省赛 Prime Factors

问题 L: Prime Factors 时间限制: 1 Sec  内存限制: 128 MB 提交: 36  解决: 28 [提交][状态][论坛] 题目描述 I'll give you a number , please tell me how many different prime factors in this number. 输入 There is multiple test cases , in each test case there is only one line contain

A1059. Prime Factors (25)

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 lon

1059 Prime Factors

题意: 给出一个int型正整数N,要求把N分解成若干个质因子,如N=97532468,则把N分解成:97532468=2^2*11*17*101*1291.质因子按增序输出,如果某个质因子的幂是1,则1不输出. 思路:质因子分解的基础题. 首先,定义如下因子的结构体,用于存放最终的结果.因为N是一个int范围的正整数,由于2*3*5*7*11*13*17*19*23*29>INT_MAX,也就是说,任意一个int型整数,可分解出来的不同的质因子的个数不会超过10个,因此,数组只要开到10就够了.

patA1059 Prime Factors

这个问题叫做质因子分解,花了大概两个小时写对了.这道题细节挺多的,书上提到了几点,有一个很容易错的点就是n一开始要先用一个变量保存起来,不保存的话后面有点麻烦,所以建议还是先保存起来.因为过程中要不断的改变n,最后还要打印出n,如果n为1的话还要特殊处理.当然也可以一开始处理打印,不过我觉得和思维颠倒有些难受.一个很重要的问题就是打印的素数表需要多大,这个我也不清楚怎么办,所以先写出来看,随机应变,如果不能完全覆盖的话再往上加,最后完全覆盖了那个样例.最后解决的细节是当我输入2的时候一开始只探测

质因子分解——Prime Factors

先上原理 对于一个非素数来说 1,所有质因子小于等于sqrt(n) 2,只存在一个大于sqrt(n)的质因子,其他质因子都小于sqrt(n) 至于证明,可以用反证法. 若是有多余一个大于sqrt(n)的质因子,这些因子的乘积..... 下面上代码 这里借助一个结构体,当然你也可以用数组 struct factor { int x;//记录素因子 int cnt;//素因子的个数 }fac[10]; 2 3 5 7 11 13 17 19 23 29 以上10个素数的乘积已经超过了int的表示范围