VIJOS 1889 天真的因数分解 ——莫比乌斯函数

同理BZOJ2440

二分答案,不过这次变成了统计含有平方因子的个数

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (ll i=j;i<=k;++i)
#define D(i,j,k) for (ll i=j;i>=k;--i)
#define ll long long
#define maxn 200005
int vis[maxn],mu[maxn],pr[maxn],top=0;
void init()
{
	F(i,2,maxn-1)
	{
		if (!vis[i]) mu[i]=1,pr[++top]=i;
		F(j,1,top)
		{
			if (i*pr[j]>=maxn) break;
			vis[i*pr[j]]=1;
			if (i%pr[j]==0) {mu[i*pr[j]]=0;break;}
			mu[i*pr[j]]=-mu[i];
		}
	}
}

ll solve(ll n)
{
	ll t=sqrt(n),ret=0;
	F(i,1,t) ret+=mu[i]*(n/(i*i));
	return ret;
}

ll k,l,r;

int main()
{
	init();
	scanf("%lld",&k);
	l=0;r=50000000000LL;
	while (l<r)
	{
		ll mid=l+r>>1;
		if (solve(mid)>=k) r=mid;
		else l=mid+1;
	}
	printf("%lld\n",r);
}

  

时间: 2024-08-09 10:43:31

VIJOS 1889 天真的因数分解 ——莫比乌斯函数的相关文章

VIJOS 1889 天真的因数分解

https://vijos.org/p/1889 同BZOJ2440.. 1 #include<algorithm> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<iostream> 6 #define N 200000 7 #define ll long long 8 int mul[N+10],mark[N+10],p[N+10]; 9 ll K; 10

三行写出莫比乌斯函数(HDU1695)

莫比乌斯函数是可以在三行内写出来的 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn=1000000; 5 int mu[maxn+10],T; 6 void Mobius(){ 7 for(int d=1,k;d<=maxn;++d) 8 for(mu[1]=1,k=d<<1;k<=maxn;mu[k]=mu[k]-mu[d],k+=d);

HDU 6053 TrickGCD 莫比乌斯函数/容斥/筛法

题意:给出n个数$a[i]$,每个数可以变成不大于它的数,现问所有数的gcd大于1的方案数.其中$(n,a[i]<=1e5)$ 思路:鉴于a[i]不大,可以想到枚举gcd的值.考虑一个$gcd(a_1,a_2,a_3…a_n)=d$,显然每个$a_i$的倍数都满足,有$\frac{a_i}{d}$种方案 那么一个d对答案的贡献为\[\prod_{i=1}^{min(a)}{\lfloor\frac{a_i}{d}\rfloor}    \] 但是所有的d计入会有重复情况,考虑容斥,对d进行素数分

【51nod-1239&amp;1244】欧拉函数之和&amp;莫比乌斯函数之和 杜教筛

题目链接: 1239:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 1244:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 杜教筛裸题,不过现在我也只会筛这俩前缀和... $$s(n)=\sum _{i=1}^{n}f(i)$$ 那么就有: $$\sum_{i=1}^{n}f(i)\lfloor \frac{n}{i} \

莫比乌斯函数&amp;莫比乌斯反演

莫比乌斯函数:http://wenku.baidu.com/view/fbec9c63ba1aa8114431d9ac.html  OrzPoPoQQQ 这个证明过程第三步和第四步一开始没看懂…… 第三步:观察计算左边f(k)的系数,可以看出只要d不大于n/k均可以使μ(d)成为f(k)的系数,那么f(k)的系数就是sigma[d丨(n/k)] μ(d) (方括号内为d的范围) 利用整除的性质,重新组合了一下这几项,相当于对一个多项式重新分组提取因式什么的…… 第四步:利用sigma μ(d)=

51Nod - 1240 莫比乌斯函数

莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.(据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数). 具体定义如下: 如果一个数包含平方因子,那么miu(n) = 0.例如:miu(4), miu(12), miu(18) = 0. 如果一个数不包含平方因子,并且有k个不同的质因子,那么miu(n) = (-1)^k.例如:miu(2), miu(3), miu(30) = -1,miu(1), mi

【数论】莫比乌斯函数

莫比乌斯函数     莫比乌斯函数!?提到这个东西你会不会想到一个大神级的玩意:莫比乌斯反演       莫比乌斯函数其实很简单,非常非常简单…… 好了,步入正题吧……        我们定义一个函数M,参数为x,函数内容如下: X=X1^P1*X2^P2*……*Xa^Xk        那么这个式子到底是用来干什么的呢?        我们使X1.X2.X3都存在一个素数集合中,那么它们必定都是素数        则P1.P2.P3……为指数,因为对于任何数x(x>=2),都可以写成这种形式.

[BZOJ 2440] [中山市选2011] 完全平方数 【二分 + 莫比乌斯函数】

题目链接:BZOJ - 2440 题目分析 首先,通过打表之类的方法可以知道,答案不会超过 2 * k . 那么我们使用二分,对于一个二分的值 x ,求出 [1, x] 之间的可以送出的数有多少个. 怎么来求呢?我们使用容斥原理. 先求出不能送的数(即含有平方因子的数)有多少个,然后用总数减去就可以了. 那么,就是 含有一个质数平方因子的数(2^2的倍数 + 3^2的倍数 + 5^2的倍数....) - 含有两个质数平方因子的数((2 * 3)^2的倍数 + (2 * 5)^2的倍数 + ...

BZOJ 2440 中山市选 2011 完全平方数 莫比乌斯函数+二分

题目大意 给出一个数k,求第k个不是完全平方数个数的数字(这里的完全平方数并不包括1). 思路 首先介绍一下莫比乌斯函数(M?bius): μ(x)=? ? ? ? ? ? ?  1(?1) k 0 x=1能分解成k个不同的质因数的乘积其他情况 然后呢,由于莫比乌斯函数是个积性函数,于是我们就可以线性地求出所有需要的莫比乌斯函数值. 剩下的工作就是在外层套一个二分,转成判定问题,小于一个数的数字中有多少个数字不是完全平方数的倍数.这个东西用容斥乱搞一下就好了~ CODE #define _CRT