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

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define LL unsigned long long
using namespace std; bool mod[100005]; LL PHI(LL P){
LL ret=1;
for(LL i=2;i*i<=P;i++)
if(P%i==0){
ret*=i-1;
P/=i;
while(P%i==0){
P/=i;
ret*=i;
}
}
if(P>1)
ret*=P-1;
return ret;
} LL quick(LL a,LL k,LL m){
LL ret=1; LL t=a%m;
while(k){
if(k&1) ret=(ret*t)%m;
k>>=1;
t=(t*t)%m;
}
return ret;
} int main(){
int T;
LL b,P,M;
scanf("%d",&T);
for(int kase=1;kase<=T;kase++){
scanf("%I64u%I64u%I64u",&b,&P,&M);
printf("Case #%d: ",kase);
if(P==1){
if(M==18446744073709551615ULL)
printf("18446744073709551616\n");
else
printf("%I64u\n",M+1);
continue;
}
LL phi=PHI(P);
LL i,ans;
LL fac=1; ans=0;
for(i=0;i<=M&&fac<=phi;i++){
if(quick(i,fac,P)==b){
ans++;
}
fac*=(i+1);
}
fac%=phi;
for(;i<=M&&fac;i++){
if(quick(i,fac,P)==b)
ans++;
fac=(fac*(i+1))%phi;
}
if(i<=M){
memset(mod,false,sizeof(mod));
LL cn=0;
for(LL k=0;k<P;k++){
if(quick(i+k,phi,P)==b){
mod[k]=true;
cn++;
}
}
ans+=((M-i+1)/P)*cn;
LL e=(M-i+1)%P;
for(LL k=0;k<e;k++)
if(mod[k])
ans++;
}
printf("%I64u\n",ans);
}
return 0;
}

  

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. 请用Java设计一个Least Recently Used (LRU) 缓存

    LRU介绍:LRU是Least Recently Used的缩写,即最少使用页面置换算法,是为虚拟页式存储管理服务的, 思路介绍: 能够使用两个标准的数据结构来实现.Map和Queue.由于须要支持多 ...

  2. Linux网络驱动程序

    Linux 的网络系统主要是基于 BSD UNIX 的套接字机制. 在系统与驱动程序之间定义了数据结构 sk_buff 进行传输数据.系统支持对发送数据和接收数据缓存,提供流控机制并提供对多协议的支持 ...

  3. (LeetCode)二叉树中和为某一值的路径

    原体例如以下: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that addin ...

  4. 2016.03.27,英语,《Vocabulary Builder》Unit 06

    equ: from Latin aequus, meaning 'equal', equalize:使相等; equivalent:[ɪ'kwɪvələnt], A is equivalent to ...

  5. ubuntu 使用阿里云 apt 源

    以下内容来自 https://opsx.alibaba.com/mirror Ubuntu对应的“帮助”信息 修改方式:打开 /et/apt/sources.list 将http://archive. ...

  6. POJ 1543 暴搜

    题意:输出a^3=b^3+c^3+d^3的所有a,b,c,d的值. b,c,d由小到大且b,c,d都大于1. 思路: 按照题意写就好.... // by SiriusRen #include < ...

  7. nginx报错日志:see security.limit_extensions

    访问出现部分.js.css等部分文件被拒绝错误日志如下: 19:20:13 [error] 1181#0: *287 FastCGI sent in stderr: "Access to t ...

  8. P2216 [HAOI2007]理想的正方形(二维RMQ)

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示a,b,n的值 第二行至 ...

  9. JAVA 日期工具类的总结

    一般,在项目中,我们会会经常使用到日期的各种方式的处理,在各个业务逻辑操作中,都需要相关的日期操作,因此,实现项目中的日期工具类的提出,还是十分重要的,下面,就项目中常用到的日期的相关操作方式,做了一 ...

  10. js input 只能输入数字

    HTML网页上这么写 <input type="text" style="ime-mode:disabled;" onpaste="return ...