http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19089
给你一个long long类型的数,把这个数分解成质数相乘的形式。
首先把素数打表,然后求就可以了。
#include<cstdio>
#include<cstring>
#include<cmath>
const int maxn=1000001;
typedef long long ll;
bool visit[maxn];
int prime[maxn],primenum;
void init_prim()
{
memset(visit, true, sizeof(visit));
primenum = 0;
for(int i = 2; i <= maxn; i++)
{
if(visit[i])
{
prime[primenum++] = i;
}
for(int j = 0; (j < primenum) && (i*prime[j] <= maxn); j++)
{
visit[i*prime[j]] = false;
if(i%prime[j] == 0) break;
}
}
}
int main()
{
//freopen("a.txt","r",stdin);
ll n;
while(~scanf("%lld",&n)&&n!=-1)
{
init_prim();
for(int i=0;i<primenum;i++)
{
if(n==0) break;
while(n%prime[i]==0&&n)
{
printf(" %d\n",prime[i]);
n/=prime[i];
}
}
if(n!=1) printf(" %lld\n",n);
printf("\n");
}
return 0;
}