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

#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. CF802G Fake News (easy)

    CF802G Fake News (easy) 题意翻译 给定一个字符串询问能否听过删除一些字母使其变为“heidi” 如果可以输出“YES”,不然为“NO” 题目描述 As it's the fir ...

  2. HDU 4454

    想了很久,发现其实就只需要三分枚举圆上的点,到矩形的最短很容易就可以求到了.开始时考虑要不要根据矩形相对圆的方位来划分枚举区间,后来发现一定不能这样做的. 注意题目给的是矩形的对角形,但没说哪一条对角 ...

  3. POJ-3984-迷宫问题-BFS(广搜)-手写队列

    题目链接:id=3984">http://poj.org/problem? id=3984 这个本来是个模板题,可是老师要去不能用STL里的queue,得自己手写解决.ORZ....看 ...

  4. 0x06 倍增

    这东西太玄学了我真是不太会... 对于这道例题,很容易看出最大值必然是最大减最小,次大减次小…… 常规的贪心思想,分的个数一样,总长度越大越好.其实我的第一想法是二分右端点..但是只有40,至今没有搞 ...

  5. UESTC--1272--Final Pan's prime numbers(水题)

    Final Pan's prime numbers Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & % ...

  6. [POJ 2279] Mr. Young's Picture Permutations

    [题目链接] http://poj.org/problem?id=2279 [算法] 杨氏矩阵与勾长公式 [代码] #include <algorithm> #include <bi ...

  7. Sort和UnSort的小技巧

    Sort和UnSort的小技巧: 记录sortidx,对sortidx再从小到大排序就可以得到用于还原的unsortidx. 对于序列A: sort_idx = np.argsort(A) un_so ...

  8. Oracle 新手语法记录

    一.用户 1. 创建用户 语法:create user 用户名 identified by 口令; create user test identified by test; 2. 修改用户 语法:al ...

  9. java8 stream 流 例子

    Trader raoul = new Trader("Raoul", "Cambridge"); Trader mario = new Trader(" ...

  10. HTTP+XML接口客户端 结合策略模式实现总结

    在项目中,我们经常会使用到http+xml的接口,而且不仅仅的是一个,可能会有多个http的接口需要实时的交互.但是http接口的发送消息的公共部分是一样的,只有每个接口的报文解析和返回报文是不同的, ...