zoukankan      html  css  js  c++  java
  • LJJ爱数数(莫比乌斯反演)

    题意:

    给定(n),求满足(frac{1}{a}+frac{1}{b}=frac{1}{c}),且(a,b,c)互质的三元组((a,b,c))数目。((a,b,cleq n))
    (nleq10^{12})

    首先,使用类似P5253 丢番图 的方法,两边乘以(abc)

    (ac+bc=ab)
    (ab-ac-bc+c^2=c^2)
    ((a-c)(b-c)=c^2)

    (a-c=x)(b-c=y),则(xy=c^2)
    (a,b,c)不互质,则存在(g,(g>1))满足(g|(x+c))(g|(y+c))(g|c)
    那么(g|x)(g|y)(g|c)。即满足(x,y,c)互质即可

    (x,y,c)不互质,则存在(g,(g>1))满足(x=gx')(y=gy')(g|c)
    (x'y'g^2=c^2)(g^2 | c^2)(g|c)
    就是说,只要满足(g|x)(g|y),就能满足(g|c)

    所以,只要(gcd(x,y)=1)即可。
    此外,还要满足(max(x,y)+cleq n)
    不妨设(y<x),那么(x+cleq n)

    因为(gcd(x,y)=1),所以(c^2)的每种质因子,要么都给x,要么都给y。
    因此,(x,y)都是完全平方数。

    (i^2=x)(j^2=y(j<i)),那么(c=ij)
    因为(i^2+ijleq n),所以(i(i+j)leq n),即(jleq frac{n}{i}-i)

    (R_i=min(i-1,frac{n}{i}-i)),则答案为
    (sum_{i=1}^n {sum_{j=1}^{R_i} [gcd(i,j)=1]})
    直接莫比乌斯反演:
    (sum_{d=1}^n u(d){sum_{d|i}^{} {left lfloor frac{R_i}{d} ight floor}})

    (i>sqrt{n})时,显然(R_i=0),忽略即可。

    时间复杂度(O(sqrt{n}logsqrt{n}))
    最后别忘乘2。

    代码:

    #include <stdio.h>
    #define ll long long
    ll R[1000010];
    int sa[1000010],ss[1000010],u[1000010],sl=0;
    void getu(int n)
    {
    	u[1]=1;
    	for(int i=2;i<=n;i++)
    	{
    		if(!sa[i])
    		{
    			ss[sl++]=i;
    			u[i]=-1;
    		}
    		for(int j=0;j<sl&&i*ss[j]<=n;j++)
    		{
    			sa[i*ss[j]]=true;
    			if(i%ss[j]==0)
    			{
    				u[i*ss[j]]=0;
    				break;
    			}
    			u[i*ss[j]]=-u[i];
    		}
    	}
    }
    int main()
    {
    	ll n,ans=0;int m=0;
    	scanf("%lld",&n);
    	if(n==1)
    	{
    		printf("0");
    		return 0;
    	}
    	for(int i=2;i<=n;i++)
    	{
    		R[i]=n/i-i;
    		if(i-1<R[i])
    			R[i]=i-1;
    		if(R[i]<=0)
    			break;
    		m=i;
    	}
    	getu(m);
    	for(int i=1;i<=m;i++)
    	{
    		if(u[i])
    		{
    			for(int j=i;j<=m;j+=i)
    				ans+=u[i]*(R[j]/i);
    		}
    	}
    	printf("%lld",ans*2+1);
    	return 0;
    }
    
  • 相关阅读:
    【noip模拟赛10】奇怪的贸易 高精度
    【noip模拟赛8】魔术棋子
    【noip模拟赛7】足球比赛 树
    P2502 [HAOI2006]旅行 并查集
    python发邮件:
    读取excel表格.py
    allure的其他参数
    生成allure测试报告:
    Java
    调用阿里云接口实现短信消息的发送源码——CSDN博客
  • 原文地址:https://www.cnblogs.com/lnzwz/p/12128600.html
Copyright © 2011-2022 走看看