码迷,mamicode.com
首页 > 其他好文 > 详细

HDOJ4861:Couple doubi

时间:2016-07-11 21:19:36      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

题意给出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

 

HDOJ4861:Couple doubi

标签:

原文地址:http://www.cnblogs.com/chendl111/p/5661562.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!