//游戏名:《素数奥秘》,作者xtmg·xsf.
//通过第n-1个素数与n+1个素数,并对倍数进行排除,猜测第n个素数
//游戏名:《素数奥秘》,作者xtmg·xsf.
//通过第n-1个素数与n+1个素数,并对倍数进行排除,猜测第n个素数
#include<iostream>
#include<math.h>
using namespace std;
int p[100005];
bool sushu(int x)
{
for(int i=2;i*i<=x;i++)
{
if(x%i==0)return false;
}
return true;
}
int main()
{
int m=1;
bool kaishi=1;
for(int i=2;i<=1000000;i++)
{
if(sushu(i)==true){
p[m]=i;
m++;
}
}
while(kaishi==1){
int n=1;
cout<<"你要猜第几个素数:"<<endl;
cin>>n;
cout<<"第"<<n-1<<"个素数:"<<p[n-1]<<endl;
cout<<"第"<<n+1<<"个素数:"<<p[n+1]<<endl;
bool a[p[n+1]-p[n-1]+4];
for(int i=1;i<=p[n+1]-p[n-1]-1;i++)
{
a[i]=1;
}
int cnt=(p[n+1]-p[n-1])/5;
cout<<cnt<<endl;
while(cnt>0)
{
cnt--;
int t=0;
cout<<"你要排除谁的倍数(输入1即退出排除):";
cin>>t;
if(t==1)break;
for(int i=1;i<=p[n+1]-p[n-1]-1;i++)
{
if((i+p[n-1])%t==0)a[i]=0;
}
cout<<"还剩:";
for(int i=1;i<=p[n+1]-p[n-1]-1;i++)
{
if(a[i]==1)cout<<i+p[n-1]<<" ";
}
cout<<endl;
}
cout<<"输入你的答案:";
int k;
cin>>k;
if(k==p[n])cout<<"恭喜你,猜对了"<<endl;
else cout<<"抱歉,你猜错了,正确的是:"<<p[n]<<endl;
cout<<"输入0可再来一次:";
int r;
cin>>r;
if(r!=0)break;
}
}