1059 Prime Factors (PAT甲级)

这道题目的测试集有点弱,我没写41-43行代码也能通过所有测试点,但其实连6=2×3, 14=2×7这种比较简单的问题,答案也是错误的。

#include <cstdio>
#include <cmath>
#include <map>

long N, a;
std::map<int, int> mp;

bool isPrime(int p){
    if(p == 1){
        return false;
    }
    if(p == 2 || p == 3){
        return true;
    }
    int sqr = (int)sqrt(p * 1.0);
    for(int i = 2; i <= sqr; ++i){
        if(p % i == 0){
            return false;
        }
    }
    return true;
}

int main(){
    scanf("%ld", &N);
    a = N;
    if(isPrime(a) || a == 1){
        printf("%ld=%ld", a, a);
        return 0;
    }
    int sq = (int) sqrt(a * 1.0);
    for(int i = 2; i <= sq; ++i){
        while(a % i == 0){
            mp[i]++;
            a /= i;
        }
        if(a == 1){
            break;
        }
    }
    if(isPrime(a)){
        mp[a]++;
    }
    printf("%ld=", N);
    for(auto it = mp.begin(); it != mp.end(); ++it){
        if(it != mp.begin()){
            printf("*");
        }
        printf("%d", it->first);
        if(it->second != 1){
            printf("^%d", it->second);
        }
    }
    return 0;
}

题目如下:

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值