1059. Prime Factors (25)

题目链接: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:
97532468
Sample Output:
97532468=2^2*11*17*101*1291

分析:

注意边界条件1=1的情况

AC代码:

#include
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出错。

1059. Prime Factors (25)_第1张图片

后来:

1059. Prime Factors (25)_第2张图片

——Apie陈小旭

你可能感兴趣的:(PAT)