码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-03-21 10:53:00      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:因数分解   else   top   string   break   ace   lap   define   names   

同理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);
}

  

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

标签:因数分解   else   top   string   break   ace   lap   define   names   

原文地址:http://www.cnblogs.com/SfailSth/p/6592915.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!