两个多月之前写的题,今天因为看到一道非常相似的题就翻出来了,发现完全不会,没救。

  感觉这个题其实第一步是最难想到的,也是最重要的。

  设d=gcd(a,b)。那么a=yd,b=xd,且gcd(x,y)=1。a+b|ab等价于x+y|xyd。

  由gcd(x,y)=1,得gcd(x+y,y)=gcd(x,x+y)=1。x和y都与x+y互质,那么他们的积xy也与x+y互质,即gcd(xy,x+y)=1。

  gcd(xy,x+y)=1,而x+y|xyd,所以x+y|d。

  那么现在要求的是

  下取整的那部分是满足x+y|d且xd<=n的d的个数。

  显然x>√n之后就没有贡献了。这样复杂度变为线性(不算gcd复杂度的话),但还不够。

  看到那个gcd=1,妥妥的上莫比乌斯反演。接下来比较套路。

  

  

  

  后面一部分的计算可以整除分块。

  那这样的时间复杂度是多少呢?看起来是低于线性的,但具体是多少我也不知道……总之他跑的比香港记者还非常快。

  今天看到的那道题多了一个限制,即ab/(a+b)与gcd(a,b)互质。

  设c=ab/(a+b),那么有(x+y)c=xyd。设d=k(x+y),c=kxy。由gcd(d,c)=1,如果能证明k是正整数的话,那么显然k=1。下证k为正整数。

  反证。假设k=u/v(u,v∈N*,gcd(u,v)=1,v>1)。因为c,d均为正整数,所以v|x+y,v|xy。而又有gcd(x+y,xy)=1,矛盾。所以k为正整数。

  剩下部分就类似了,由于确定了k=1即d=x+y,可以做到严格的√nlogn。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cmath>
  6. #include<algorithm>
  7. using namespace std;
  8. #define N 100000
  9. #define min(a,b) ((a)<(b)?(a):(b))
  10. #define ri register int
  11. int n,m,mobius[N],prime[N],cnt=;
  12. long long ans=;
  13. bool flag[N];
  14. int main()
  15. {
  16. cin>>n;
  17. m=sqrt(n);
  18. flag[]=;mobius[]=;
  19. for (int i=;i<=m;i++)
  20. {
  21. if (!flag[i]) prime[++cnt]=i,mobius[i]=-;
  22. for (int j=;j<=cnt&&prime[j]*i<=m;j++)
  23. {
  24. flag[prime[j]*i]=;
  25. if (i%prime[j]==) break;
  26. else mobius[prime[j]*i]=-mobius[i];
  27. }
  28. }
  29. for (ri i=;i<=m;i++)
  30. if (mobius[i])
  31. {
  32. ri v=i*i,c=m/i+;
  33. for (ri k=;k<c;k++)
  34. {
  35. ri t=n/(k*v),u=(k<<)-,h=min(t,u)+;
  36. for (ri j=k+;j<h;)
  37. {
  38. ri w=t/j,l=min(u,t/w)+;
  39. ans+=1ll*(l-j)*mobius[i]*w;
  40. j=l;
  41. }
  42. }
  43. }
  44. cout<<ans;
  45. }

BZOJ2671 Calc(莫比乌斯反演)的更多相关文章

  1. 【BZOJ2671】Calc(莫比乌斯反演)

    [BZOJ2671]Calc 题面 BZOJ 给出N,统计满足下面条件的数对(a,b)的个数: 1.\(1\le a\lt b\le N\) 2.\(a+b\)整除\(a*b\) 我竟然粘了题面!!! ...

  2. hdu.5212.Code(莫比乌斯反演 && 埃氏筛)

    Code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  3. bzoj 2818 Gcd(欧拉函数 | 莫比乌斯反演)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2818 [题意] 问(x,y)为质数的有序点对的数目. [思路一] 定义f[i]表示i之 ...

  4. 【BZOJ2301】【HAOI2011】Problem B(莫比乌斯反演)

    [BZOJ2301][HAOI2011]Problem B(莫比乌斯反演) 题面 Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y ...

  5. 【Luogu3455】【POI2007】ZAP-Queries(莫比乌斯反演)

    [Luogu3455][POI2007]ZAP-Queries(莫比乌斯反演) 题面 题目描述 FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x ...

  6. BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演

    BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演 Description  设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表 ...

  7. Luogu4916 魔力环 莫比乌斯反演、组合、生成函数

    传送门 先不考虑循环同构的限制,那么对于一个满足条件的序列,如果它的循环节长度为\(d\),那么与它同构的环在答案中就会贡献\(d\)次. 所以如果设\(f_i\)表示循环节长度恰好为\(i\)的满足 ...

  8. LOJ# 572. 「LibreOJ Round #11」Misaka Network 与求和(min25筛,杜教筛,莫比乌斯反演)

    题意 求 \[ \sum_{i = 1}^{n} \sum_{i = 1}^{n} f(\gcd(i, j))^k \pmod {2^{32}} \] 其中 \(f(x)\) 为 \(x\) 的次大质 ...

  9. 【LOJ#572】Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛)

    [LOJ#572]Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛) 题面 LOJ \[ans=\sum_{i=1}^n\sum_{j=1}^n f(gcd(i,j))^k\ ...

随机推荐

  1. jmeter(十二)关联之正则表达式提取器

    如果有这样的情况:一个完整的操作流程,需要先完成某个操作,获得某个值或数据信息,然后才能进行下一步的操作(也就是常说的关联/将上一个请求的响应结果作为下一个请求的参数): 在jmeter中,可以利用正 ...

  2. Omi框架学习之旅 - 生命周期 及原理说明

    生命周期 name avatars company constructor 构造函数 new的时候 install 初始化安装,这可以拿到用户传进的data进行处理 实例化 installed 安装完 ...

  3. rook 排错记录 + Orphaned pod found kube-controller-manager的日志输出

    1.查看rook-agent(重要)和mysql-wordpress 的日志,如下: MountVolume.SetUp failed for volume "pvc-f002e1fe-46 ...

  4. element vuex 语音播报

    data () { return { showDetail: false, height: 1, // 1 不可用 0 正常 2运维中 result: [], tableData: [], // 应用 ...

  5. Android自动化测试之Monkeyrunner使用方法及实例

    目前Android SDK里自带的现成的测试工具有monkey 和 monkeyrunner两个.大家别看这俩兄弟名字相像,但其实是完完全全不同的两个工具,应用在不同的测试领域.总的来说,monkey ...

  6. 【SCOI2015】小凸想跑步

    题面 题解 推波柿子: 设点\(A(x_a, y_a), B(x_b, y_b), C(x_c, y_c), D(x_d, y_d), P(x, y)\) \(\vec{a} = (x_b - x_a ...

  7. 分布式监控系统Zabbix-3.0.3--短信报警设置

    前面已分别介绍了zabbix的邮件.微信报警设置,这些都是手机在有网络时才能收到报警信息,那如果手机没有网的情况下怎么办,这就需要考虑使用短信接口报警了.当服务出现故障达到预警级别是通过发送短信的形式 ...

  8. 安装python包时报错

    pip install numpy  时  报错: Traceback (most recent call last):  File "d:\学习\python\python-3.6.5\l ...

  9. JAVA常用工具类汇总

    一.功能方法目录清单: 1.getString(String sSource)的功能是判断参数是否为空,为空返回"",否则返回其值: 2.getString(int iSource ...

  10. 09-java学习-数组-冒泡排序-选择排序-数组工具类编写-查找-扩容

    数组的排序算法 查找算法 数组协助类Arrays的学习和使用 数组的扩容