1059. Prime Factors (25)

来源:互联网 发布:无绳跳绳 知乎 编辑:程序博客网 时间:2024/05/16 18:52

题目链接: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<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陈小旭

0 0
原创粉丝点击