HDU - 6189 Law of Commutation(找规律+推公式 17广西邀请赛题)
2017-09-05 20:46
344 查看
题目描述:
点击打开链接
点击打开链接
题意:给定n,a,其中令2^n=m,现求区间[1,m]内有多少个b满足,a^b%m=b^a%m。
首先打表的话可以很容易找到一个规律:a为奇数时,答案肯定为1,这个规律很容易看出就不证了(其实我也不会证 T_T),详细解释一下a为偶数时怎么算,m一定为偶数,所以a^b%m的结果也为偶数,那么b^a%m的结果也必须为偶数,所以b必须为偶数,a既然为偶数那么一定可以写成2*x,所以a^b=2^b*x^b,又m=2^n显然可以发现如果b>=n那么a^b%m一定为0,这个时候就可以分类讨论,由于题目数据中n非常小,所以b<n时直接暴力求解,那么b>=n时这个已经确定a^b%m=0所以我们需要b^a%m同样为0,b为偶数,那么b一定可以表示为2^x*y,那么b^a=2^ax*y^a,我们先令y取得最小1,b^a=2^ax,b^a(2^ax)%m(2^n)=0,所以ax>=n,x>=n/a(注意这里n/a应该向上取整),所以我们就这样找到最小满足条件的x,然后在求出m以内2^x的倍数即可(注意把n以内的答案减去,因为n以内的答案暴力时求过一遍)。还有这题迷之爆int。
AC代码:
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<string> #include<cmath> #include<stack> #include<vector> #include<queue> #include<algorithm> using namespace std; const int MAXM=100010; const long long MOD=1000000007; const double PI=acos(-1); long long n,a; long long qpow(long long x,long long y,long long mod) { long long res=1; while(y) { if (y&1) res=(res*x)%mod; x=(x*x)%mod; y=y>>1; } return res; } long long qpow(long long x,long long y) { long long res=1; while(y) { if (y&1) res=res*x; x=x*x; y=y>>1; } return res; } int main() { while(scanf("%lld%lld",&n,&a)!=EOF) { if (a&1) { printf("1\n"); continue; } else { long long m=1<<n; long long ans=0; for (long long i=1;i<=n;i++) if (qpow(a,i,m)==qpow(i,a,m)) ans++; long long b2=n/a; if (b2*a<n) b2=b2+1; long long b3=qpow(2,b2); //int b4=qpow(2,a); long long res=m/b3-n/b3; ans=ans+res; printf("%lld\n",ans); } } return 0; }
相关文章推荐
- HDU 6189 Law of Commutation 2017ACM-ICPC 广西邀请赛 (打表找规律)
- 解题报告:HDU_6189 Law of Commutation (找规律)
- hdu6189 Law of Commutation 2017ACM-ICPC全国邀请赛(广西) 找规律
- HDU 6189 Law of Commutation(数论)
- HDU 6186 && 2017广西邀请赛:CS Course
- 2017 icpc广西邀请赛 K.Query on A Tree (hdu 6191)可持久化字典树
- HDU 6191 && 2017广西邀请赛:Query on A Tree(字典树启发式合并)
- HDU 6184 && 2017广西邀请赛:Counting Stars(三元环)
- hdu 6186 CS Course 2017ACM/ICPC广西邀请赛-重现赛
- 【2017广西邀请赛】hdu 6182 A Math Problem
- 【每日一题(9)】Duizi and Shunzi HDU - 6188 2017ACM/ICPC广西邀请赛
- HDU-6184-Counting Stars(广西邀请赛C题)(数据结构优化)
- 2017 ACM/ICPC 广西邀请赛||HDU 6185 Covering 【状压DP+矩阵快速幂】
- hdu 5584 LCM Walk(数学推导公式,规律)
- HDU 6188 && 2017广西邀请赛:Duizi and Shunzi
- HDU 6183 && 2017广西邀请赛:Color it(线段树)
- 【2017广西邀请赛】hdu 6186 CS Course
- HDU - 5047 Sawtooth 找规律+推公式 (拆位计算)
- HDU 2086 A1 = ? (找规律推导公式 + 水题)(Java版)
- [广西邀请赛 - E] [HDU] 6186 - CS Course - 思维 - 位运算 or 前缀和和后缀和