【HDU】3923 Invoker
2012-09-12 21:48
363 查看
同【POJ】2409 Let it Bead
只不过要求逆元。
只不过要求逆元。
#include<cstdio> typedef long long LL; #define MOD 1000000007 LL PowMod(LL a, LL b, LL c) { LL ans; a %= c; for (ans = 1; b; b >>= 1) { if (b & 1) { ans *= a; ans %= c; } a *= a; a %= c; } return ans; } int GCD(int x, int y) { return y ? GCD(y, x % y) : x; } int ExtGcd(int a, int b, int &x, int &y) { int t, d; if (b == 0) { x = 1; y = 0; return a; } d = ExtGcd(b, a % b, x, y); t = x; x = y; y = t - a / b * y; return d; } int InvMod(int a, int n) { int x, y; ExtGcd(a, n, x, y); return (x % n + n) % n; } int main() { int c, ca = 1; int n, i, k; LL ans; scanf("%d", &c); while (c--) { scanf("%d%d", &k, &n); ans = 0; for (i = 1; i <= n; i++) { ans += PowMod(k, GCD(n, i), MOD); ans %= MOD; } if (n & 1) { ans += PowMod(k, (n + 1) >> 1, MOD) * (LL) n % MOD; ans %= MOD; } else { ans += PowMod(k, n >> 1, MOD) * (LL) (n >> 1) % MOD; ans += PowMod(k, (n >> 1) + 1, MOD) * (LL) (n >> 1)% MOD; ans %= MOD; } printf("Case #%d: %I64d\n", ca++, ans * InvMod(n << 1, MOD) % MOD); } return 0; }
相关文章推荐
- [ACM] hdu 3923 Invoker (Poyla计数,快速幂运算,扩展欧几里得或费马小定理)
- HDU 3923 Invoker
- hdu 3923 Invoker (polya,扩展gcd)
- HDU 3923 Invoker
- hdu 3923 Invoker
- hdu 3923 Invoker(Polya定理)
- HDU-3923-Invoker
- HDU 3923 Invoker 【裸Polya 定理】
- HDU - 3923 - Invoker - (Polya定理,除法求逆元)
- HDU 3923 Invoker(polya)
- HDU 3923 Invoker(polya定理模版题)
- HDU 3923 Invoker
- HDU 3923 Invoker
- HDU --- 3923 Invoker 【poyla定理】
- HDU 3923 Invoker(polya定理+逆元)
- HDU 3923 Invoker(Polya原理+费马小定理)
- HDU 3923 Invoker(polya定理+乘法逆元(扩展欧几里德+费马小定理))
- HDU 3923 polya+乘法逆元+扩展欧几里德
- [HDU 3923] Invoker polya
- HDOJ 3923 Invoker