栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1309 Coconuts, Revisited

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1309 Coconuts, Revisited

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int mr=(1<<16)+1;bool notp[mr];int pr[mr];int pn;void getpri(){    pn=0;    memset(notp,0,sizeof(notp));    for(int i=2; i<mr; i++)    {        if(!notp[i])        { pr[pn++]=i;        }        for(int j=0; j<pn && i*pr[j]<mr; j++)        { int k=i*pr[j]; notp[k]=1; if(i%pr[j]==0) {     break; }        }    }}int fac[100];int tot[100],top;void div(int n){    for(int i=0;i<pn&&pr[i]*pr[i]<=n;i++)    {        if(n%pr[i]==0)        { fac[top]=pr[i]; tot[top]=0; while(n%pr[i]==0) {     tot[top]++;     n/=pr[i]; } top++;        }    }    if(n>1)        fac[top]=n,tot[top++]=1;}bool solve(int m,int n){    for(int i=0;i<n;i++)    {        if(m%n!=1) return false;        m=(m-1)/n*(n-1);    }    return m%n==0;}int ans;int po(int n,int k){    int p=1;    while(k--)        p*=n;    return p;}void dfs(int k,int res,int m){    if(k==top)    {        if(solve(m,res)) ans=max(ans,res);        return;    }    for(int i=tot[k];i>=0;i--)        dfs(k+1,res*po(fac[k],i),m);}int main(){    getpri();    int m;    while(scanf("%d",&m),m>=0)    {        int mm=m-1;        top=0;        div(mm);        ans=-1;        dfs(0,1,m);        if(ans==-1) printf("%d coconuts, no solutionn",m);        else printf("%d coconuts, %d people and 1 monkeyn",m,ans);    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374112.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号