码迷,mamicode.com
首页 > 其他好文 > 详细

Polya

时间:2018-10-11 21:56:23      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:can   type   break   main   index   gcd   const   freopen   ase   

using namespace std;
typedef long long LL;
const int MAXN = 1e3 +10;
const LL MOD = (LL)1 << 62;

int N , M;

LL qpow( LL base , LL index)
{
LL ans = 1;
base %= MOD;
while( index)
{
if( index&1)
ans = ans base % MOD;
index/=2;
base = base
base % MOD;
}
return ans;
}
LL gcd(LL a, LL b)
{
return b==0 ? a : gcd(b,a%b);
}

LL rot()
{
LL ans = 0;
for(int i=1 ; i<= N ; i++)
ans= (ans +qpow(M , gcd(i, N )) ) %MOD;
return ans;
}

LL turn()
{
LL ans = 0;
if( N & 1 )
ans += N qpow(M,(N + 1)/2 ) %MOD;
else
ans = (ans + N/2
qpow(M ,N /2)+N/2 * qpow(M, N/2+1) )%MOD;
return ans;
}

LL polya()
{
if(!N) return 0;
LL ans = rot() + turn();
ans /= 2* N;
return ans;
}

int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
while(scanf("%d %d",&M,&N)==2){
if(!N && !M) break;
printf("%lld\n",polya());
}
return 0;
}

Polya

标签:can   type   break   main   index   gcd   const   freopen   ase   

原文地址:https://www.cnblogs.com/xiuwenli/p/9774732.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!