您的位置:首页 > 其它

HDU 3923(Polya)

2016-03-30 21:12 351 查看
hdu 3923
题目大意:给定m种颜色,长度为n的项链,要求旋转和翻转不能重复,求方法数 ;
模板题 + 逆元;

#include <iostream>
#include <cstdio>
#define LL long long
#define MOD 1000000007

using namespace std;

LL gcd(LL a, LL b)
{
return b == 0 ? a : gcd(b, a % b);
}

LL quick_Mod(LL m, LL n, LL k)
{
LL ans = 1;

while (n)
{
if (n & 1)
{
ans = (ans * m) % k;
}

n = n >> 1;
m = (m * m) % k;
}

return ans;
}

int main()
{
int T;
scanf("%d", &T);

for (int cas = 1; cas <= T; cas++)
{
LL m, n;
scanf("%lld%lld", &m, &n);

LL sum = 0;

for (int i = 1; i <= n; i++)
{
LL t = gcd(i, n);
sum = (sum + quick_Mod(m, t, MOD));
}

if (n & 1)
{
sum = (sum + quick_Mod(m, (n + 1) / 2, MOD) * n % MOD) % MOD;
}
else
{
sum = (sum + n / 2 * quick_Mod(m, (n + 2) / 2, MOD) % MOD) % MOD;
sum = (sum + n / 2 * quick_Mod(m, n / 2, MOD) % MOD) % MOD;
}

sum = sum * quick_Mod(2 * n, MOD - 2, MOD) % MOD;

printf("Case #%d: %lld\n", cas, sum);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu-3923 Polya 模板