您的位置:首页 > 大数据 > 人工智能

POJ-3421-X-factor Chains

2014-04-03 09:08 381 查看
自己推的,其实就是分解因式,然后注意下剪枝。后台数据很大,最开始我开的数组记录,每次都初始化,但这样耗费的时间直接导致超时,后面去掉了就OK了~

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=(1<<20)+2;
bool ispri[maxn];
int n,pri[maxn],cnt,ans;
long long fact[21];
void Init()
{
cnt=0;
ispri[1]=1;
for(int i=2;i<maxn;i++)
if(!ispri[i])
{
pri[cnt++]=i;
for(int j=2;i*j<maxn;j++)
ispri[i*j]=1;
}
fact[0]=1;
for(int i=1;i<=20;i++)
fact[i]=fact[i-1]*i;
}
int main()
{
Init();
while(scanf("%d",&n)!=EOF)
{
ans=0;
int m=n,index=0;
long long divs=1;
while(m>1)
{
if(m%pri[index]==0)
{
int dcnt=0;
while(m%pri[index]==0)
{
m/=pri[index];
dcnt++;
}
divs=divs*fact[dcnt];
ans+=dcnt;
}
index++;
if(!ispri[m])
{
ans++;
break;
}
}
long long s=fact[ans];
s/=divs;
printf("%d %I64d\n",ans,s);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: