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

#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. BA-siemens-insight在win7下如何配置opc接口

    一.运行环境:win7(OPC接口在win_xp下配置需安装插件,不好意思没搞定,现在只有win7系统32位下的教程了) 由于OPC(OLE for Process Control)建立在Micros ...

  2. Core Dataeasy出现的错误

    1.2015-08-24 15:52:17.674 Tasks[3189:144763] CoreData: error: -addPersistentStoreWithType:SQLite con ...

  3. POJ 1320

    作弊了--!该题可以通过因式分解得到一个佩尔方程....要不是学着这章,估计想不到.. 得到x1,y1后,就直接代入递推式递推了 x[n]=x[n-1]*x[1]+d*y[n-1]*y[1] y[n] ...

  4. Scapy介绍官方文档翻译

    关于Scapy Scapy为何如此特别 高速的报文设计 一次探測多次解释 Scapy解码而不解释 高速展示Quick demo 合理的默认值 学习Python 本人英文水平有限,翻译不当之处,请參考官 ...

  5. YunOS曙光初现----看好阿里云OS----阿冬专栏!!

    阿里云os - YunOS 阿里云OS(YunOS)是阿里巴巴集团的智能手机操作系统,依托于阿里巴巴集团电子商务领域积累的经验和强大的云计算平台,基于LINUX开发. 魅族4阿里yun OS版已上市. ...

  6. tapestry3创建自己定义组件

    两种方法创建自己定义标签: 一.通过AbstractComponent父类渲染,此种方法直接在java类中编写页面脚本.然后输出. 1.编写java类com/ailk/ech/ecop/view/te ...

  7. 淘宝数据库OceanBase SQL编译器部分 源代码阅读--生成逻辑计划

    淘宝数据库OceanBase SQL编译器部分 源代码阅读--生成逻辑计划 SQL编译解析三部曲分为:构建语法树.生成逻辑计划.指定物理运行计划. 第一步骤,在我的上一篇博客淘宝数据库OceanBas ...

  8. 2015.06.11,技术,关于Matlab中的Jbtest检验

    总体分布的正态性检验一般采取Jarque-Bera检验方法. 1. JBTest检验的定义: 在统计学中,Jarque-Bera检验是对样本数据是否具有符合正态分布的偏度和峰度的拟合优度的检验.该检验 ...

  9. Oracle实例和Oracle数据库(Oracle体系结构)---转载

    对于初接触Oracle 数据库的人来讲,很容易混淆的两个概念即是Oracle 实例和Oracle 数据库.这两 概念不同于SQL sever下的实例与数据库,当然也有些相似之处.只是在SQL serv ...

  10. POJ 3233 矩阵快速幂&二分

    题意: 给你一个n*n的矩阵 让你求S: 思路: 只知道矩阵快速幂 然后nlogn递推是会TLE的. 所以呢 要把那个n换成log 那这个怎么搞呢 二分! 当k为偶数时: 当k为奇数时: 就按照这么搞 ...