1059. Prime Factors (25)

寻找大整数的质因数分解
本文介绍了一种算法,用于找到任意正整数的质因数,并以特定格式输出结果。对于输入的任意正整数N,算法会输出其质因数分解形式,包括每个质因数及其指数。
部署运行你感兴趣的模型镜像

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

总觉得这道题目有点问题,要是输入的大数就是一个素数呢!肯定会超时啊!!!!晕~~~

思路:找出素数列表,依次与N判断即可

AC代码:

#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
struct Node {
    long value;
    int countN;
};
vector<Node> arr(70);
vector<long> primeArr;
long N;

long isPrime(long n){
    if(n==2)
        return 1;
    for(long i=2;i<=sqrt(n);i++){
        if(n%i==0){
            return 0;
        }
    }
    return 1;
}
void findPrime(long n){
    for(long i=2;i<=n;i++){
        if(isPrime(i)){
            primeArr.push_back(i);
        }
    }
}
int main()
{
    cin>>N;
    if(N==1){
        cout<<"1=1";
        return 0;
    }
    long cp = N;
    findPrime(10000);
    int index = 0;
    for(long i=0;i<primeArr.size();i++){
        if(N%primeArr[i]==0){
            if(index==0){
                arr[index].value = primeArr[i];
                arr[index].countN++;
            }else{
                if(primeArr[i]==arr[index].value){
                    arr[index].countN++;
                }else{
                    arr[++index].value = primeArr[i];
                    arr[index].countN++;
                }
            }
            N /= primeArr[i];
            i--;
            if(N==1){
                break;
            }
        }else{
            if(arr[index].countN>0){
                index++;
            }
        }
    }
    cout<<cp<<"=";
    for(int i=0;i<index;i++){
        if(arr[i].countN==1){
            cout<<arr[i].value<<"*";
        }
        if(arr[i].countN>1){
            cout<<arr[i].value<<"^"<<arr[i].countN<<"*";
        }
    }
    if(arr[index].countN==1){
            cout<<arr[index].value;
        }
        if(arr[index].countN>1){
            cout<<arr[index].value<<"^"<<arr[index].countN;
        }
    return 0;
}


 

您可能感兴趣的与本文相关的镜像

Qwen-Image-Edit-2509

Qwen-Image-Edit-2509

图片编辑
Qwen

Qwen-Image-Edit-2509 是阿里巴巴通义千问团队于2025年9月发布的最新图像编辑AI模型,主要支持多图编辑,包括“人物+人物”、“人物+商品”等组合玩法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值