分解质因数

版权声明:欢迎转载,注明出处 https://blog.csdn.net/asd1170586462/article/details/79110633

思想:
先打一个素数表 遍历素数表,如果发现某个素数x是n的质因子,用n除以x直到n%x!=0为止

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define N 10000
bool isprime[N];
int pri[N];
int cnt=0;
void ispri()//用线性筛法打素数表
{
    memset(isprime,0,sizeof(isprime));
    for(int i=2;i<=N;i++)
    {
        if(!isprime[i])
            pri[cnt++]=i;
        for(int j=0;j<cnt&&i*pri[j]<=N;j++)
        {
            isprime[i*pri[j]]=1;
            if(!(i%pri[j]))
                break;
        }
    }
    return;
}
void solve(int n)
{
    if(n==1)
        cout<<1<<endl;
    else
    {
        for(int i=0;;i++)//遍历素数表
        {
            while(n%pri[i]==0)//如果这个素数是n的质因子 更新n的值
            {
                cout<<pri[i]<<" ";
                n/=pri[i];
            }
            if(!isprime[n])//如果更新之后发现n是一个素数 结束遍历
            {
                if(n!=1)//如果n剩的是个1 就不用再输出了
                    cout<<n<<endl;
                break;
            }
        }
    }
    return;
}

int main()
{
    int n;
    ispri();
    while(cin>>n)
    {
        solve(n);
    }
    return 0;
}
阅读更多
换一批

没有更多推荐了,返回首页