Hdu 4335 What is N? 欧拉函数降幂公式 + 循环节
来源:互联网 发布:央视市场研究 知乎 编辑:程序博客网 时间:2024/05/17 09:14
a^n mod c= a^(n mod phi(c) + phi(c)) mod c (n >= phi(c) )
n! mod phi(c) = 0 n!的因子只需包含 phi(c) 因为 这题phi(mod) 不会太大
然后所有的n! mod phi(c) 都等于0 最后问题转化成有多少个n ^ phi(c)mod p = b;
(a + b)^n = (a mod p + b mod p) ^ n (mod p)
所以这个式子是个长度为p的循环节
根绝循环节求结果就行了
#include<cstdio>#include<algorithm>#include<iostream>#define LL unsigned long long#define lson i<<1#define rson (i<<1)+1#define maxn 100005// a^n mod c= a^(n mod phi(c) + phi(c)) mod c n >= phi(c)using namespace std;LL b, mod, M, am[maxn];LL getEul(LL n){ LL ans = 1; for(LL i = 2; i * i <= n; i++) { if(n % i == 0) { ans *= (i - 1); while(n % i == 0) { n /= i; ans *= i; } } } if(n > 1) ans *= n - 1; return ans;}LL fastMod(LL a, LL x){ LL ans = 1; while(x) { if(x & 1) ans *= a; a *= a; ans %= mod; a %= mod; x >>= 1; } return ans;}int main(){ int t, i1 = 1; scanf("%d", &t); while(t--) { scanf("%I64u%I64u%I64u", &b, &mod, &M); printf("Case #%d: ", i1++); if(mod == 1) { if(M == 18446744073709551615ull) { printf("18446744073709551616\n"); } else{ printf("%I64u\n", M + 1); } continue; } LL eu = getEul(mod); //printf("%I64u\n", eu); LL pre = 1; LL i = 0; LL ans = 0; for( ; i <= M && pre < eu; i++) { if(fastMod(i, pre) == b) ans++; pre *= (i + 1); } pre %= eu; for( ; i<= M && pre; i++) { if(fastMod(i, pre + eu) == b) ans++; pre *= (i + 1); pre %= eu; } int cnt = 0; for(int j = 0; i <= M && j < mod; j++ , i++) { if(fastMod(i, eu) == b) {ans++;cnt++;} am[j] = cnt; } if(i <= M){ M-=i; M+=1; LL cir = M / mod; ans += cnt * cir; M -= cir * mod; if(M > 0) ans += am[M - 1]; } printf("%I64u\n", ans); } return 0;}
0 0
- Hdu 4335 What is N? 欧拉函数降幂公式 + 循环节
- HDU 4335What is N?2012多校联赛第四场(欧拉函数+坑数据)
- HDU 4335 What is N?
- hdu 4335 What is N?
- HDU 4335 What is N?
- HDU 4335What is N?
- What is N? HDU
- HDU 4335 What is N? 简单数论
- hdu - 4335 - What is N? - 数论
- hdu 4335 What is N? 数论
- [HDU 5728] PowMod (欧拉函数的积性+欧拉公式降幂+欧拉筛)
- HDU 2814 斐波那契循环节+欧拉函数降幂
- HDU 2814 斐波那契循环节+欧拉函数降幂
- HDU 4335 What is N? 多校4(数论)
- HDU 5728 PowMod (欧拉函数+指数循环节)
- hdu -2837(指数循环节+欧拉函数)
- hdu 2837 Calculation【欧拉函数,快速幂求指数循环节】
- HDU 1787 欧拉公式
- SpringMVC返回json数据时乱码解决
- 链表------创建删除增加遍历
- java学习例题之数据加密
- leetcode :Binary Search:H-Index IIe(275)
- 【任玉刚】给Android程序员的一些面试建议
- Hdu 4335 What is N? 欧拉函数降幂公式 + 循环节
- .h头文件,.lib库文件和.dll关系
- Java中string和stringBuffer的区别
- Touch事件的传递机制?
- 又一电源问题引发的灾难
- LINK:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- node.js浅谈
- K-邻近算法(kNN)python3.X
- leetcode :Binary Search:First Bad Version(278)