题目链接:http://www.patest.cn/contests/pat-a-practise/1059
题目:
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:97532468Sample Output:
97532468=2^2*11*17*101*1291
分析:
注意边界条件1=1的情况
AC代码:
#include<stdio.h>
using namespace std;
bool mark[100001];
int prime[100001];
int primeSize;
void init(){
primeSize = 0;
for (int i = 2; i <= 100000; i++){
if (mark[i] == true)continue;
prime[primeSize++] = i;
if (i >= 1000)continue;
for (int j = i * i; j <= 100000; j += i){
mark[j] = true;
}
}
}
int main(){
freopen("F://Temp/input.txt", "r", stdin);
init();
int n1,n;
scanf("%d", &n1);
n = n1;
if (n == 1){//*point
printf("1=1\n");
return 0;
}
int ansPrime[30];
int ansSize = 0;
int ansNum[30];
for (int i = 0; i < primeSize; i++){
if (n % prime[i] == 0){
ansPrime[ansSize] = prime[i];
ansNum[ansSize] = 0;
while (n % prime[i] == 0){
ansNum[ansSize] ++;
n /= prime[i];
}
ansSize++;
if (n == 1)break;
}
}
if (n != 1){
ansPrime[ansSize] = n;
ansNum[ansSize++] = 1;
}
printf("%d=", n1);
for (int i = 0; i < ansSize;i ++){
if (i == ansSize - 1){
if (ansNum[i] == 1)printf("%d\n", ansPrime[i]);
else printf("%d^%d\n", ansPrime[i], ansNum[i]);
}
else{
if (ansNum[i] == 1)printf("%d*", ansPrime[i]);
else printf("%d^%d*", ansPrime[i], ansNum[i]);
}
}
return 0;
}
截图:
没有注意到1=1的情况下案例3出错。
后来:
——Apie陈小旭