zoukankan      html  css  js  c++  java
  • 洛谷P3704 [SDOI2017]数字表格(莫比乌斯反演)

    传送门

    yyb大佬太强啦……

    感觉还是有一点地方没有搞懂orz

     1 //minamoto
     2 #include<cstdio>
     3 #include<iostream>
     4 #include<cstring>
     5 using namespace std;
     6 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
     7 char buf[1<<21],*p1=buf,*p2=buf;
     8 inline int read(){
     9     #define num ch-'0'
    10     char ch;bool flag=0;int res;
    11     while(!isdigit(ch=getc()))
    12     (ch=='-')&&(flag=true);
    13     for(res=num;isdigit(ch=getc());res=res*10+num);
    14     (flag)&&(res=-res);
    15     #undef num
    16     return res;
    17 }
    18 const int N=1e6+5,mod=1e9+7;
    19 int ksm(int x,int y){
    20     int res=1;
    21     while(y){
    22         if(y&1) res=1ll*res*x%mod;
    23         x=1ll*x*x%mod,y>>=1;
    24     }
    25     return res;
    26 }
    27 int f[N],p[N],cnt,g[N],inv[N],F[N],mu[N],vis[N];
    28 int n,m;
    29 void init(){
    30     f[1]=g[1]=F[0]=F[1]=mu[1]=1;
    31     for(int i=2;i<N;++i){
    32         f[i]=(f[i-1]+f[i-2])%mod;
    33         g[i]=ksm(f[i],mod-2),F[i]=1;
    34         if(!vis[i]) p[++cnt]=i,mu[i]=-1;
    35         for(int j=1;j<=cnt&&i*p[j]<N;++j){
    36             vis[i*p[j]]=1;
    37             if(i%p[j]==0) break;
    38             mu[i*p[j]]=-mu[i];
    39         }
    40     }
    41     for(int i=1;i<N;++i){
    42         if(!mu[i]) continue;
    43         for(int j=i;j<N;j+=i)
    44         F[j]=1ll*F[j]*(mu[i]==1?f[j/i]:g[j/i])%mod;
    45     }
    46     for(int i=2;i<N;++i)
    47     F[i]=1ll*F[i]*F[i-1]%mod;
    48 }
    49 int main(){
    50 //    freopen("testdata.in","r",stdin);
    51     init();int T=read();
    52     while(T--){
    53         n=read(),m=read();
    54         if(n>m) swap(n,m);
    55         int ans=1,inv=0;
    56         for(int l=1,r;l<=n;l=r+1){
    57             r=min(n/(n/l),m/(m/l));
    58             inv=1ll*F[r]*ksm(F[l-1],mod-2)%mod;
    59             ans=1ll*ans*ksm(inv,1ll*(n/l)*(m/l)%(mod-1))%mod;
    60         }
    61         printf("%d
    ",(ans+mod)%mod);
    62     }
    63     return 0;
    64 }
  • 相关阅读:
    MYSQL数据库基础
    MSYQL操数据DML
    MYSQL外键约束
    MYSQL多表查询
    MYSQL结果排序、分页查询、聚合函数
    未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项”的解决方法
    由于扩展配置问题而无法提供您请求的页面。
    JS中的prototype(转载)
    mvc表单如何绑定bool类型的属性或变量
    使用c#正则验证关键字并找出匹配项
  • 原文地址:https://www.cnblogs.com/bztMinamoto/p/9703857.html
Copyright © 2011-2022 走看看