Author: HE, Qinming
Organization: 浙江大学
Time Limit: 200 ms
Memory Limit: 64 MB
Code Size Limit: 16 KB
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 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
Code
//NKW 甲级真题1019
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
const int maxn = 10010;
int prime[maxn], pnum = 0;
bool p[maxn] = { false };
void find_prime(){
for (int i = 2; i < maxn; i++){
if (p[i] == false){
prime[pnum++] = i;
for (int j = i + i; j < maxn; j += i)
p[j] = true;
}
}
}
typedef struct factor{
int x; //质数
int cnt; //个数
}factor;
int main(){
find_prime();
int n = 0;
scanf("%d", &n);
int num = 0;
factor fac[10];
if (n == 0)
printf("0=0");
else if (n == 1)
printf("1=1");
else{
printf("%d=", n);
int sqr = (int)sqrt(1.0*n);
for (int i = 0; i < pnum && prime[i] <= sqr; i++) {
if (n%prime[i] == 0) {
fac[num].x = prime[i];
fac[num].cnt = 0;
while (n%prime[i] == 0) { //求个数
fac[num].cnt++;
n /= prime[i];
}
num++;
}
if (n == 1)
break;
}
if (n != 1) {
fac[num].x = n;
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);
}
printf("\n");
return 0;
}
Analysis
-因式分解,并按其格式进行输出。
-要求因子都必须为素数