设为首页 加入收藏

TOP

poj2409Let it Bead
2015-11-21 01:03:46 来源: 作者: 【 】 浏览:1
Tags:poj2409Let Bead

polya计数法

简单模板

?

void solve(int n,int c)
{
    int ans = 0;
    for (int i = 1; i <= n; i++) if (n % i == 0)
        {
            ans += fun(c, i) * euler(n / i);
        }
    if (n & 1) ans += n * fun(c, n / 2 + 1);
    else ans += n / 2 * (fun(c, n / 2) + fun(c, n / 2 + 1));
    cout << ans / (2 * n) << endl;
}

fun()函数是快速幂运算,enler是求欧拉数

?

?

#include
  
   
#include
   
     using namespace std; int fun(int a,int x) { int ans=1; while(x) { if(x&1) ans=ans*a; a=a*a; x>>=1; } return ans; } int euler(int n){ int res=n,a=n; for(int i=2;i*i<=a;i++){ if(a%i==0){ res=res/i*(i-1); while(a%i==0) a/=i; } } if(a>1) res=res/a*(a-1); return res; } void solve(int n,int c) { int ans = 0; for (int i = 1; i <= n; i++) if (n % i == 0) { ans += fun(c, i) * euler(n / i); } if (n & 1) ans += n * fun(c, n / 2 + 1); else ans += n / 2 * (fun(c, n / 2) + fun(c, n / 2 + 1)); cout << ans / (2 * n) << endl; } int main() { int n,c; while(~scanf("%d%d",&c,&n)&&n&&c) { solve(n,c); } return 0; } 
   
  


?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇light OJ 1027 A Dangerous Maze .. 下一篇BZOJ 1002: [FJOI2007]轮状病毒 ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: