BZOJ 2986 莫比乌斯函数+容斥原理

Posted konjak魔芋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ 2986 莫比乌斯函数+容斥原理相关的知识,希望对你有一定的参考价值。

2986: Non-Squarefree Numbers

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 337  Solved: 156

Description

一个正整数K被称为squarefree,如果它没有一个D^2(D>1)这样的约数。

Input

读入一个正整数N

Output

找出第N个不是squarefree的数。1<=N<=10^10

Sample Input


10

Sample Output


27

Hint
前10个非squarefree的数
4 8 9 12 16 18 20 24 25 27

HINT

Source

 

 

【分析】

  跟这题一模一样->传送门

  【第一次二分打错。。

 

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 #define Maxm 1000010
 8 #define LL long long
 9 
10 LL pri[Maxm],pl,mu[Maxm];
11 bool vis[Maxm];
12 void init()
13 {
14     for(LL i=2;i<=Maxm-10;i++)
15     {
16         if(!vis[i]) pri[++pl]=i,mu[i]=-1;
17         for(LL j=1;j<=pl;j++)
18         {
19             if(pri[j]*i>Maxm-10) break;
20             vis[pri[j]*i]=1;
21             if(i%pri[j]==0) mu[pri[j]*i]=0;
22             else mu[i*pri[j]]=-mu[i];
23             if(i%pri[j]==0) break;
24         }
25     }
26 }
27 
28 LL n;
29 bool check(LL x)
30 {
31     LL ans=0;
32     for(LL i=2;i*i<=x;i++)
33     {
34         ans+=x/(i*i)*(-mu[i]);
35     }
36     return ans>=n;
37 }
38 
39 int main()
40 {
41     init();
42     scanf("%lld",&n);
43     LL l=0,r=30000000000LL;
44     while(l<r)
45     {
46         LL mid=(l+r)>>1;
47         if(check(mid)) r=mid;
48         else l=mid+1;
49     }
50     printf("%lld\\n",l);
51     return 0;
52 }
View Code

 

2017-04-20 20:20:29

以上是关于BZOJ 2986 莫比乌斯函数+容斥原理的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ2440完全平方数(莫比乌斯函数,容斥原理)

[BZOJ 2440][中山市选2011]完全平方数(容斥原理/莫比乌斯函数+二分)

BZOJ 2440: [中山市选2011]完全平方数 二分答案 + 容斥原理 + 莫比乌斯反演

[HAOI2011][bzoj2301] Problem b [莫比乌斯反演+容斥原理+分块前缀和优化]

容斥原理 期望 莫比乌斯函数

0x37 容斥原理与莫比乌斯函数