HDU4861:Couple doubi(费马小定理)

题意:

给出k个球和质数p,对每球以式val(i)=1^i+2^i+...+(p-1)^i (mod p)计算出它的价值,然后两个人轮流拿,最后拿到的球的总价值大的获胜,问我们先手是否获胜。

我们分成两种情况讨论:

情形1:i%(p-1)==0,即i是(p-1)的倍数,由费马小定理 a^(p-1)=1(mod p),可以套入公式得该球价值为 p-1;

情形2:i不是(p-1)的倍数,这时要用到原根的性质,对于一个正整数g和质数p,若g为p的原根,可将1,2,3...p-1表示为g^1,g^2,g^3...g^(p-1),那么带入公式可得val(i)=1^i+2^i+...+(p-1)^i (mod p)=g^i+g^(2*i)+g^(3*i)+...+g^((p-1)*i),即可以用等比公式得到val(i)=(g^i * (g^i*(p-1) - 1)/(g^i-1),由于费马小定理可得,val(i)=0;

那么既然val(i)只在i为(p-1)的倍数时为1,最后只要统计k是(p-1)的倍数,判断为奇则输出“YES”,否则为“NO";

 

相关资料:

http://baike.baidu.com/link?url=dJ6_gXINuYRpcHkyHrJ_DmFY8BnVQioHG3IOjajxzwnEHncWUvue_uz8exyr44sKMeZRE0MgIhv-17kpZwO12q

http://baike.baidu.com/link?url=nLUeG8Lxckv9FceAt_ceDZIP1K_RLncVYaOlbtp3M-LpZJXMqNJDcHZ1iUA5XTe0NVAILGhpYfi_jPe6bf3FGa

http://baike.baidu.com/link?url=WtHCJTPisLPTKNL4vDtSa-fHkEXSRfetxA_T_xZZxzeqdEEqKTxvTxSyIzuZLW_1leWJrLWv5QmBmaARW2FJgK

 

推荐blog:

http://blog.csdn.net/keshuai19940722/article/details/38050899

http://blog.csdn.net/RaAlGhul/article/details/51882067

 

 1 #include<cstdio>
 2 
 3 int k,p;
 4 
 5 int main()
 6 {
 7     while(scanf("%d%d",&k,&p)==2)
 8     {
 9         k/=(p-1);
10         if(k&1) puts("YES");
11         else puts("NO");
12     }
13 }
View Code

 

posted @ 2016-07-11 20:42  遗风忘语  阅读(210)  评论(0编辑  收藏  举报