zoukankan      html  css  js  c++  java
  • [Luogu5106]dkw的lcm

    https://minamoto.blog.luogu.org/solution-p5106

    容易想到枚举质因子及其次数计算其贡献,容斥计算$varphi(p^i)$的次方数。

     1 #include<cstdio>
     2 #include<algorithm>
     3 #define rep(i,l,r) for (int i=(l); i<=(r); i++)
     4 typedef long long ll;
     5 using namespace std;
     6 
     7 const int N=1000010,mod=1e9+7;
     8 int n,k,tot,ans,b[N],p[N];
     9 
    10 int ksm(int a,int b,int mod){
    11     int res=1;
    12     for (; b; a=1ll*a*a%mod,b>>=1)
    13         if (b & 1) res=1ll*res*a%mod;
    14     return res;
    15 }
    16 
    17 void init(){
    18     rep(i,2,n){
    19         if (!b[i]) p[++tot]=i;
    20         for (int j=1; j<=tot && i*p[j]<=n; j++){
    21             b[i*p[j]]=1;
    22             if (i%p[j]==0) break;
    23         }
    24     }
    25 }
    26 
    27 int D(ll pi,ll pi1){
    28     int s1=ksm(n-n/pi,k,mod-1),s2=ksm(n-n/pi1,k,mod-1);
    29     return (s1-s2+mod-1)%(mod-1);
    30 }
    31 
    32 int main(){
    33     scanf("%d%d",&n,&k); init(); ans=1;
    34     rep(i,1,tot)
    35         for (ll t=p[i]; t<=n; t*=p[i])
    36             ans=1ll*ans*ksm(t-t/p[i],D(t*p[i],t),mod)%mod;
    37     printf("%d
    ",ans);
    38     return 0;
    39 }
  • 相关阅读:
    .net中Timer的使用
    计算日期的神器
    求全排列函数next_permutation
    各种排序
    求最大字段和
    炸弹时间复位
    最少步数,广搜
    数据
    水池数目
    最大岛屿
  • 原文地址:https://www.cnblogs.com/HocRiser/p/10225735.html
Copyright © 2011-2022 走看看