uva 10294 Polya计数

来源:互联网 发布:软件测试自学书籍 编辑:程序博客网 时间:2024/06/07 02:27
/****************polya计数分奇偶,再加上分旋转翻转********************/#include <iostream>#include <cstdio>using namespace std;long long n,t;long long pow(long long a,long long b){    long long res = 1;    while(b){        if(b&1) res *= a;        b >>= 1;        a *= a;    }    return res;}long long gcd(long long a,long long b){    if(b == 0) return a;    return gcd(b,a%b);}long long solve1(){    long long res = 0;    for(int i=1;i<=n;i++){        res += pow(t,gcd(i,n));    }    return res;}long long solve2(){    if(n&1) return ( solve1() + n*pow(t,(n+1)/2) ) / (2*n);    else return ( solve1() + (n/2)*pow(t,n/2) + (n/2)*pow(t,n/2+1)) / (2*n);}int main(){    while(cin >> n >> t){        printf("%lld %lld\n",solve1()/n,solve2());    }    return 0;}

0 0
原创粉丝点击