rqnoj-116-质数取石子

来源:互联网 发布:本地漫画阅读软件 编辑:程序博客网 时间:2024/05/17 06:40

需要详细题解就说一声。


#include<cstdio>int ss[20010],flag[20010],f[20010];bool v[20010],hash[20010];int n,num=1;int main(){    freopen("1.in","r",stdin);freopen("1.out","w",stdout);for(int i=2;i<=20000;i++){if(!hash[i]){ss[num++]=i;for(int j=i*i;j<=20000;j+=i) hash[j]=true;}flag[i]=num-1;}for(int i=2;i<=20000;i++)for(int j=flag[i];j>=1;j--)if(!v[i-ss[j]]){v[i]=true;break;}//for(int i=1;i<=20;i++) if(v[i]) printf("%d  ",i);for(int i=2;i<=20000;i++){if(v[i]){num=30000;for(int j=flag[i];j>=1;j--){if(!v[i-ss[j]] && f[i-ss[j]] < num){num=f[i-ss[j]];}}f[i]=num+1;}else{num=-30000;for(int j=flag[i];j>=1;j--){if(f[i-ss[j]] > num){num=f[i-ss[j]];}}f[i]=num+1;}}scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d",&x);if(v[x]) printf("%d\n",f[x]);else printf("-1\n");}}

原创粉丝点击