poj 2409 Let it Bead

http://poj.org/problem?id=2409

#include<iostream>

#include<cstdio>

#include<algorithm>

#include<cstring>

#include<map>

#include<cmath>

#define LL long long



using namespace std;



int gcd(int a,int b)

{

    if(a%b==0)

    return b;

    return gcd(b,a%b);

}

LL ploya(int n,int m)

{

    if(n==0)

    return 0;

    LL ans=0;

    for(int i=1;i<=n;++i)

    {

        ans+=(LL)(pow(double(m),gcd(n,i)));

    }//cout<<ans<<endl;

    if(n%2==1)

    {

        ans+=(n*((LL)(pow(double(m),(n+1)/2))));

    }else

    {

        ans+=(n/2*(LL)(pow(double(m),n/2)+pow(double(m),(n+2)/2)));

    }

    return ans/n/2;

}

int main()

{

    int n,m;

    while(scanf("%d %d",&m,&n)!=EOF)

    {

        if(n==0&&m==0)

        break;

        cout<<ploya(n,m)<<endl;

    }

    return 0;

}

  

你可能感兴趣的:(poj)