Logo 李凌宇的博客

博客

史上最快的分解质因数!!!带验证

2024-01-07 08:47:49 By 李凌宇
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int ans[64];
bool zs(int x){
    if(x==2||x==3||x==5||x==7){
        return true;
    }
    if((x+1)%6==0||(x-1)%6==0){
        int sq=sqrt(x);
        for(int i=5;i<=sq;i+=6){
            if(x%i==0||x%(i+2)==0){
                return false;
            }
        }
        return true;
    }
    else{
        return false;
    }
}
int main(){
    long long a;
    cin>>a;
    long long ba=a;
    int i=2;
    int idx=0;
    while(a%10==0){
        a/=10;
        ans[idx]=2;
        idx++;
        ans[idx]=5;
        idx++;
    }
    while(true){
        if(zs(i)){
            while(a%i==0){
                a/=i;
                ans[idx]=i;
                idx++;
                if(a==1){
                    break;
                }
            }
        }
        if(a==1){
            break;
        }
        i++;
    }
    a=1;
    for(int i=0;i<idx;i++){
        a*=ans[i];
    }
    if(ba!=a){
        cout<<"wrong";
        return 0;
    }
    sort(ans,ans+idx);
    for(int i=0;i<idx;i++){
        cout<<ans[i]<<endl;
    }
    cout<<"sum="<<idx;
    return 0;
}

评论

Joker
那验证呢?
Joker
@Kevin_Nanjing @partystopper

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。