總結
第二次寫交互題,慢慢有點感覺了,我問,他答,我給結果
算法核心
素數大於1,且只能被1和本身整除
合數大於1,且除了能被1和本身整除,還能被其他數整除,數量>=1
合數由至少兩個素數組成,且可以相同,可以不同
我們只需要看,他是否能被兩個素數整除:
先看是否能被兩個不同的素數整除:
枚舉[2,50]的素數存在15個,隱藏數字都不能被大於等於51的數整除
那麼一定是合數
如果存在被素數平方整除
2 3 5 7
4 9 25 49
那麼一定是何數
只需要看19個數字就可以判定是否爲素數
題意
我詢問不超20次,每次給一個數字,系統會根據隱藏數字回答是否被整除,當然這個隱藏數字在區間[2,100],如果確定了結果,就可以直接結束輸出素數還是合數,不用再詢問
題目鏈接
//#pragma GCC optimize(2)
//#pragma GCC target ("sse4")
#include<bits/stdc++.h>
//typedef long long ll;
#define ull unsigned long long
#define int long long
#define F first
#define S second
#define endl "\n"//<<flush
#define eps 1e-6
#define base 131
#define lowbit(x) (x&(-x))
#define PI acos(-1.0)
#define inf 0x3f3f3f3f
#define MAXN 0x7fffffff
#define INF 0x3f3f3f3f3f3f3f3f
#define ferma(a,b) pow(a,b-2)
#define mod(x) (x%mod+mod)%mod
#define pb push_back
#define decimal(x) cout << fixed << setprecision(x);
#define all(x) x.begin(),x.end()
#define memset(a,b) memset(a,b,sizeof(a));
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;
void file()
{
#ifdef ONLINE_JUDGE
#else
freopen("D:/LSNU/codeforces/duipai/data.txt","r",stdin);
// freopen("D:/LSNU/codeforces/duipai/WA.txt","w",stdout);
#endif
}
signed main()
{
// IOS;
// file();
int cnt=0;
vector<int>vec;
for(int i=2;i<=100;i++)
{
int flag=1;
for(int j=2;j*j<=i;j++)
if(i%j==0)
flag=0;
if(flag)
vec.pb(i),cout<<i<<endl;
}
vec.pb(4);
vec.pb(9);
vec.pb(25);
vec.pb(49);
sort(all(vec));
/* for(int i=0;i<20;i++)
cout<<vec[i]<<endl;*/
for(int i=0;i<19;i++)
{
cout<<vec[i]<<endl;
string str;
cin>>str;
if(str=="yes")
cnt++;
if(cnt==2)
{
cout<<"composite"<<endl;
goto good;
}
}
cout<<"prime"<<endl;
good:;
return 0;
}