• 与莫比乌斯反演没什么关系的莫比乌斯函数题


    Codeforces 1139D. Steps to One

    题目大意:

    给出$m$,一个空的数列,每次可以$rand$一个数$xin[1,m]$放到数列的末尾,若整个数列的$gcd==1$则停止加入数 求数列的期望长度

    思路:

    考虑当前整个数列的$gcd$为质数$p$的倍数,则若下一个数还是$p$的倍数即$sumlimits_{i=1}^m [gcd(i,p)==p]$,相当于没变

    则设当前$gcd$对答案产生的贡献为$ans_x$得到:$ans_x=1+ sumlimits_{i=0}^m [gcd(i,p)==p] * ans_x =1+frac{m}{p} *ans_x$

    这样会重复计算,我们用莫比乌斯函数容斥,然后移项即可

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<vector>
     9 #include<map>
    10 #include<set>
    11 #define ll long long
    12 #define db double
    13 #define inf 2139062143
    14 #define MAXN 100100
    15 #define MOD 1000000007
    16 #define rep(i,s,t) for(register int i=(s),i##__end=(t);i<=i##__end;++i)
    17 #define dwn(i,s,t) for(register int i=(s),i##__end=(t);i>=i##__end;--i)
    18 #define ren for(register int i=fst[x];i;i=nxt[i])
    19 #define pb(i,x) vec[i].push_back(x)
    20 #define pls(a,b) (a+b+MOD)%MOD
    21 #define mns(a,b) (a-b+MOD)%MOD
    22 #define mul(a,b) (1LL*(a)*(b))%MOD
    23 using namespace std;
    24 inline int read()
    25 {
    26     int x=0,f=1;char ch=getchar();
    27     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    28     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
    29     return x*f;
    30 }
    31 int n,tot,p[MAXN],ntp[MAXN],lmt,mu[MAXN];
    32 int q_pow(int bas,int t,int res=1)
    33 {
    34     for(;t;t>>=1,bas=mul(bas,bas))
    35         if(t&1) res=mul(res,bas);return res;
    36 }
    37 void mem(int n)
    38 {
    39     mu[1]=1;rep(i,2,n)
    40     {
    41         if(!ntp[i]) p[++tot]=i,mu[i]=-1;
    42         rep(j,1,tot) if(i*p[j]>n) break;
    43             else {ntp[i*p[j]]=1;if(i%p[j]) mu[i*p[j]]=-mu[i];else {mu[i*p[j]]=0;break;}}
    44     }
    45 }
    46 int main()
    47 {
    48     n=read();mem(100000);int ans=1;
    49     rep(i,2,n) ans=mns(ans,mu[i]*mul((n/i),q_pow(n-n/i,MOD-2)));
    50     printf("%d
    ",ans);
    51 }
    View Code

    bzoj 2440 完全平方数

    题目大意:

    求第$k$个不包含平方因子的数

    思路:

    二分答案$x$,之后用莫比乌斯函数容斥只有一个因子为完全平方数,两个因子为完全平方数的这些数

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<vector>
     9 #include<map>
    10 #include<set>
    11 #define ll long long
    12 #define db double
    13 #define inf 21474836460
    14 #define MAXN 100100
    15 #define MOD 1000000007
    16 #define rep(i,s,t) for(register int i=(s),i##__end=(t);i<=i##__end;++i)
    17 #define dwn(i,s,t) for(register int i=(s),i##__end=(t);i>=i##__end;--i)
    18 #define ren for(register int i=fst[x];i;i=nxt[i])
    19 #define pb(i,x) vec[i].push_back(x)
    20 #define pls(a,b) (a+b+MOD)%MOD
    21 #define mns(a,b) (a-b+MOD)%MOD
    22 #define mul(a,b) (1LL*(a)*(b))%MOD
    23 using namespace std;
    24 inline int read()
    25 {
    26     int x=0,f=1;char ch=getchar();
    27     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    28     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
    29     return x*f;
    30 }
    31 ll n;int tot,p[MAXN],ntp[MAXN],lmt,mu[MAXN];
    32 void mem(int n)
    33 {
    34     mu[1]=1;rep(i,2,n)
    35     {
    36         if(!ntp[i]) p[++tot]=i,mu[i]=-1;
    37         rep(j,1,tot) if(i*p[j]>n) break;
    38             else {ntp[i*p[j]]=1;if(i%p[j]) mu[i*p[j]]=-mu[i];else {mu[i*p[j]]=0;break;}}
    39     }
    40 }
    41 int cheq(int x,ll res=0){rep(i,1,sqrt(x)) res+=1LL*mu[i]*(x/(i*i));return res>=n;}
    42 int main()
    43 {
    44     int T=read();ll l,r,mid,ans;mem(100000);while(T--)
    45     {
    46         n=read();for(l=1,ans=r=inf;mid=l+r>>1,l<=r;)
    47             if(cheq(mid)) ans=mid,r=mid-1;else l=mid+1;
    48         printf("%d
    ",ans);
    49     }
    50 }
    View Code
  • 相关阅读:
    Activiti6详细教程
    Nginx 与 Tomcat : 413 Request Entity Too Large(请求实体太大)
    windows下安装pytorch
    vim编辑器常用操作
    el-dialog 里面的组件不刷新问题
    el-dialog 里面的 el-form 重置表单问题
    ElementUI树形表格默认展开
    设计模式之 工厂方法模式
    linux创建一个proc代码示例
    redis的安装及使用
  • 原文地址:https://www.cnblogs.com/yyc-jack-0920/p/10625236.html
Copyright © 2020-2023  润新知