hdu 2865 基礎polya問題

來源:互聯網
上載者:User
#include<cstdio>#include<iostream>using namespace std;const int MOD = 1000000007;typedef long long LL;LL n, m;int prime[37000],is[37000];void getprime(){int cnt=0;for(int i=2;i<37000;i++){if(!is[i]){prime[cnt++]=i;for(int j=i;j<37000;j+=i)is[j]=1;}}}LL pow(LL x,LL n){LL t=1;while(n){if(n&1)t=(t*x)%MOD;x=(x*x)%MOD;n >>= 1;}return t%MOD;}LL getptr(LL p,LL i){LL tmp=pow(p-1,i);if(i&1)tmp=(tmp+MOD-(p-1))%MOD;elsetmp=(tmp+p-1)%MOD;return tmp;}LL eular(LL x){if(x==1)return 1;LL rep=x;for(int i=0;prime[i]*prime[i]<=x;i++){if(x%prime[i]==0){rep-=rep/prime[i];x/=prime[i];}while(x%prime[i]==0)x/=prime[i];if(x==1)break;}if(x!=1)rep-=rep/x;return rep%MOD;}LL inv(LL n){return pow(n,MOD-2)%MOD;}int main(){getprime();while(cin>>n>>m){LL ans=0;int  i;m--;for(i = 1;i * i < n;i++){if(n%i==0){ans=(ans+(getptr(m,i)*eular(n/i))%MOD)%MOD;ans=(ans+(getptr(m,n/i)*eular(i))%MOD)%MOD;}}if(i*i==n)ans=(ans+(getptr(m,i)*eular(n/i))%MOD)%MOD;ans=((m+1)*ans)%MOD;ans=(ans*inv(n))%MOD;cout<<ans<<endl;}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.