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 = p1k1×p2k2×⋯×pmkm.
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.打印质数表,在Int范围中的质数表数组大小在100000就可以了。
2.分解质因数
3. 1 要额外判断,直接输出。
#include <cstdio>
#include <math.h>
#define LL long long
const int INF = (1<<30)-1;
int prime[100010];
bool isPrime[100010];
int x = 1;
void InputPrime() {
for (int i = 2; i < 100010; i++) {
if (isPrime[i] == false) {
prime[x++] = i;
for (LL j = i + i; j < 100010; j+=i) {
isPrime[j] = true;
}
}
}
}
struct factor {
int x; int cnt;
}fac[10];
int main() {
int a=0;
int num=0;
InputPrime();
scanf("%d", &a);
if (a == 1) {
printf("1=1");
}
//分解质因数
else {
printf("%d=",a);
int sqr = (int)sqrt(1.0*a);
for (int i = 1; i < x&&prime[i] <= sqr; i++) {
if (a%prime[i] == 0) {
fac[num].x = prime[i];
fac[num].cnt = 0;
while (a%fac[num].x == 0) {
fac[num].cnt++;
a /= prime[i];
}
num++;
}
if (a == 1) break;
}
if (a != 1) {
fac[num].x = a;
fac[num++].cnt = 1;
}
for (int i = 0; i < num; i++) {
if (i > 0) printf("*");
printf("%d", fac[i].x);
if (fac[i].cnt > 1) {
printf("^%d", fac[i].cnt);
}
}
}
return 0;
}