Codechef GUESSPRM Guess the Prime!
Posted cjoiershiina-mashiro
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codechef GUESSPRM Guess the Prime!相关的知识,希望对你有一定的参考价值。
Link
先询问(2^{15}),假设交互库回答的是(t),那么(x=2^{30}-t)满足(P|x)。
不难发现(P=2Leftrightarrow t=0),因此我们先特判此种情况。
此时(P)一定是奇素数,所以我们去掉(x)的(2)因子。
那么此时(frac{x+1}2equivfrac12pmod P),我们询问(frac{x+1}2)得到(y),那么(yequivfrac14pmod P)。
若(Pequiv1pmod 4),那么(y=frac{3P+1}4,P=frac{4y-1}3)。
若(Pequiv3pmod 4),那么(y=frac{P+1}4,P=4y-1)。
显然(frac{4y-1}3,4y-1)不可能同时为素数,判断一下就行了。
#include<cctype>
#include<cstdio>
using u32=unsigned int;
char str[10];
u32 read(){u32 x=0,c=getchar();while(isspace(c))c=getchar();while(isdigit(c))(x*=10)+=c&15,c=getchar();return x;}
u32 ask(u32 x){return printf("1 %u
",x),fflush(stdout),read();}
void answer(u32 x){printf("2 %u
",x),fflush(stdout),scanf("%s",str);}
int main()
{
for(u32 T=read(),x,y;T;--T)
{
x=ask(1<<15);
if(!x){answer(2);continue;}
for(x=(1<<30)-x;~x&1;x>>=1);
y=ask((x+1)/2),(4*y-1)%3||y==1? answer(4*y-1):answer((4*y-1)/3);
}
}
以上是关于Codechef GUESSPRM Guess the Prime!的主要内容,如果未能解决你的问题,请参考以下文章
Codechef RIN 「Codechef14DEC」Course Selection 最小割离散变量模型
codechef AUG17 T4 Palindromic Game