1059. Prime Factors (25)

本文详细介绍了如何通过编程解决一个数学问题,即找到任意正整数的所有质因数,并以特定格式输出结果。包括边界条件处理及样例输入输出分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值