利用降幂公式。。呃,还是自己去搜题解吧。知道降幂公式后,就不难了。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #define LL unsigned long long
  6. using namespace std;
  7.  
  8. bool mod[100005];
  9.  
  10. LL PHI(LL P){
  11. LL ret=1;
  12. for(LL i=2;i*i<=P;i++)
  13. if(P%i==0){
  14. ret*=i-1;
  15. P/=i;
  16. while(P%i==0){
  17. P/=i;
  18. ret*=i;
  19. }
  20. }
  21. if(P>1)
  22. ret*=P-1;
  23. return ret;
  24. }
  25.  
  26. LL quick(LL a,LL k,LL m){
  27. LL ret=1; LL t=a%m;
  28. while(k){
  29. if(k&1) ret=(ret*t)%m;
  30. k>>=1;
  31. t=(t*t)%m;
  32. }
  33. return ret;
  34. }
  35.  
  36. int main(){
  37. int T;
  38. LL b,P,M;
  39. scanf("%d",&T);
  40. for(int kase=1;kase<=T;kase++){
  41. scanf("%I64u%I64u%I64u",&b,&P,&M);
  42. printf("Case #%d: ",kase);
  43. if(P==1){
  44. if(M==18446744073709551615ULL)
  45. printf("18446744073709551616\n");
  46. else
  47. printf("%I64u\n",M+1);
  48. continue;
  49. }
  50. LL phi=PHI(P);
  51. LL i,ans;
  52. LL fac=1; ans=0;
  53. for(i=0;i<=M&&fac<=phi;i++){
  54. if(quick(i,fac,P)==b){
  55. ans++;
  56. }
  57. fac*=(i+1);
  58. }
  59. fac%=phi;
  60. for(;i<=M&&fac;i++){
  61. if(quick(i,fac,P)==b)
  62. ans++;
  63. fac=(fac*(i+1))%phi;
  64. }
  65. if(i<=M){
  66. memset(mod,false,sizeof(mod));
  67. LL cn=0;
  68. for(LL k=0;k<P;k++){
  69. if(quick(i+k,phi,P)==b){
  70. mod[k]=true;
  71. cn++;
  72. }
  73. }
  74. ans+=((M-i+1)/P)*cn;
  75. LL e=(M-i+1)%P;
  76. for(LL k=0;k<e;k++)
  77. if(mod[k])
  78. ans++;
  79. }
  80. printf("%I64u\n",ans);
  81. }
  82. return 0;
  83. }

  

HDU 4335 Contest 4的更多相关文章

  1. 数论 + 公式 - HDU 4335 What is N?

    What is N? Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4335 Mean: 给你三个数b.P.M,让你求有多少个n满 ...

  2. HDU 5045 Contest(状压DP)

    Problem Description In the ACM International Collegiate Programming Contest, each team consist of th ...

  3. hdu - 5045 - Contest(国家压缩dp)

    意甲冠军:N个人M通过主打歌有自己的期望,每个问题发送人玩.它不能超过随机播放的次数1,追求最大业绩预期 (1 ≤ N ≤ 10,1 ≤ M ≤ 1000). 主题链接:pid=5045" ...

  4. [ACM] hdu 5045 Contest (减少国家Dp)

    Contest Problem Description In the ACM International Collegiate Programming Contest, each team consi ...

  5. HDU–5988-Coding Contest(最小费用最大流变形)

    Coding Contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  6. hdu 4335 What is N?

    此题用到的公式:a^b%c=a^(b%phi(c)+phi(c))%c (b>=phi(c)). 1.当n!<phi(p)时,直接暴力掉: 2.当n!>=phi(p) &&a ...

  7. hdu 5045 Contest(状态压缩DP)

    题解:我们使用一个二位数组dp[i][j]记录进行到第i个任务时,人组合为j时的最大和(这里的j我们用二进制的每位相应一个人). 详细见代码: #include <iostream> #i ...

  8. HDU 5045 Contest

    pid=5045">主题链接~~> 做题感悟:比赛时这题后来才写的,有点小尴尬.两个人商议着写写了非常久才写出来,I want to Powerful ,I believe me ...

  9. HDU 4339 Contest 4

    树状数组,主要是抓住要求连续1的个数.这样,初始时,相同的加1,不同的加0. 查询时,用二分搜索右边界.就是比较当前mid-l+1的值与他们之间1的个数(这可以通过树状数组求区间和得出),记录右边界即 ...

随机推荐

  1. spring datasource和mybatis的datasource来源在哪里

    配置一个数据源     spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0.可以在Spring配置文件中利用这两者中任何一个配置数据源.  配置一个 ...

  2. HDU 3342 -- Legal or Not【裸拓扑排序 &amp;&amp;水题 &amp;&amp; 邻接表实现】

    Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  3. 使用UE4公布安卓平台游戏

    使用了几天的UE4 ,总算是将游戏在安卓平台执行起来了.当中遇到非常多问题,而且终于依旧有一些问题没能解决. 整体感觉是UE4这款引擎眼下还不够成熟.问题较多. 没有unity使用起来方便. 可是既然 ...

  4. Python标准库:内置函数callable(object)

    假设对象object參数是能够调用的对象,就返回True.否则返回False.只是要注意的是,当一个对象是能够调用的.并不表示调用该对象时运行一定成功,但不可调用的对象去调用时一定不会成功.假设类对象 ...

  5. ZooKeeper分布式集群部署及问题

    ZooKeeper为分布式应用系统提供了高性能服务,在许多常见的集群服务中被广泛使用,最常见的当属HBase集群了,其他的还有Solr集群.Hadoop-2中的HA自己主动故障转移等. 本文主要介绍了 ...

  6. unity3D游戏开发实战原创视频讲座系列9之塔防类游戏开发第一季

    解说文件夹 塔防游戏0基础篇... 第一讲  游戏演示和资源介绍... 第二讲  游戏场景的完毕... 第三讲  预制体的制作... 第四讲  敌人的随机产生和按路径行走... 第五讲  塔防工具的产 ...

  7. HDU 5654 xiaoxin and his watermelon candy 离线树状数组

    xiaoxin and his watermelon candy Problem Description During his six grade summer vacation, xiaoxin g ...

  8. Python笔记(四)

    # -*- coding:utf-8 -*- # 控制语句 # if...else... print "********************1********************** ...

  9. POJ 3020 Hungary

    一道建图题-- // by SiriusRen #include <cstdio> #include <cstring> using namespace std; #defin ...

  10. linux下通用Makefile写法

    linux编译多个源文件的程序比较麻烦,这下就需要通用的Makefile了,编译的时候执行一下make命令就OK,下面介绍通用makfile的写法. 假设现在有以下源文件:file1.h file1. ...