virtual hust 2013.6.21 数论基础题目 H

题目:Factoring Large Numbers

思路:开始一看,感觉暴不了,然后题目中有说大于100w的素因子只有一个,所以那就暴100w以内的质因子就行,最后剩下的不等于1的话,就是一个大于100w的素因子直接输出

#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
#define maxn 1000001
bool vis[maxn];
int prime[maxn];
int n_prime=0;
void Prime()
{
    memset(vis,true,sizeof(vis));
    vis[1]=vis[0]=false;
    for(int i=2;i<maxn;i++)
    {
        if(vis[i])
        {
            prime[++n_prime]=i;
            for(int j=2*i;j<maxn;j+=i)
                vis[j]=false;
        }

    }
    //cout<<n_prime<<" "<<prime[n_prime]<<endl;
}
int main()
{
    Prime();
    long long n;
    while(scanf("%lld",&n)!=EOF)
    {
        if(n<=0)
            break;
        for(int i=1;i<=n_prime;i++)
        {
            if(n%prime[i]==0)
            {
                while(n%prime[i]==0)
                {
                    printf("    ");
                    printf("%d
",prime[i]);
                    n/=prime[i];
                }
            }
        }
        if(n!=1)
            printf("    %lld
",n);
        printf("
");
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/overflow/p/3147805.html