【BZOJ2671】Calc

Description

  给出N,统计满足下面条件的数对(a,b)的个数:
  1.1<=a<b<=N
  2.a+b整除a*b

Input

 一行一个数N

Output

 一行一个数表示答案

Sample Input

15

Sample Output

4

HINT

数据规模和约定
N <=2^31-1

题解:玄学数学题,推导过程不难但很扯,直接上式子:

设d=gcd(a,b),则$a+b|ab$->$a'd+b'd|a'b'd^2$->$a'+b'|a'b'd$->$a'+b'|d$。

问题就变成了问你有多少个数对(a,b)满足a与b互质且$(a+b)d\le n$,$a+b|d$,又因为d>b所以b最多只能是$\sqrt n$。我们将其形式化的写出来:设$m=\sqrt n$

$\sum\limits_{b=1}^m\sum\limits_{a=1}^{b-1}[gcd(a,b)==1]\lfloor{n\over a+b}\rfloor$

反演一波$\sum\limits_{d=1}^m\mu(d)\sum\limits_{b=1}^{\lfloor {m\over d}\rfloor}\sum\limits_{a=1}^{b-1}\lfloor{n\over d^2(a+b)}\rfloor$

你敢相信。。。推到这就能A了吗?复杂度什么的见鬼去吧~

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <cmath>
  5. using namespace std;
  6. typedef long long ll;
  7. const int N=100010;
  8. ll n,m,ans;
  9. int num;
  10. int np[N],pri[N],mu[N];
  11. inline ll calc(int n,int m)
  12. {
  13. ll ret=0;
  14. int i,j,t,last;
  15. //for(i=1;i<=m;i++) for(j=1;j<i;j++) ret+=n/i/(i+j);
  16. //return ret;
  17. for(i=1;i<=m;i++)
  18. {
  19. t=n/i;
  20. for(j=i+1;j<(i<<1)&&j<=t;j=last+1)
  21. {
  22. last=min((i<<1)-1,t/(t/j));
  23. ret+=1ll*(last-j+1)*(t/j);
  24. }
  25. }
  26. return ret;
  27. }
  28. ll gcd(ll a,ll b)
  29. {
  30. return !b?a:gcd(b,a%b);
  31. }
  32. int main()
  33. {
  34. scanf("%lld",&n),m=sqrt(n);
  35. int i,j;
  36. ll last;
  37. mu[1]=1;
  38. //for(i=1;i<=m;i++) for(j=1;j<i;j++) if(gcd(i,j)==1) ans+=n/i/(i+j);
  39. //printf("%lld\n",ans),ans=0;
  40. for(i=2;i<=m;i++)
  41. {
  42. if(!np[i]) pri[++num]=i,mu[i]=-1;
  43. for(j=1;j<=num&&i*pri[j]<=m;j++)
  44. {
  45. np[i*pri[j]]=1;
  46. if(i%pri[j]==0) break;
  47. mu[i*pri[j]]=-mu[i];
  48. }
  49. }
  50. for(i=1;i<=m;i++) last=calc(n/i/i,m/i),ans+=mu[i]*last;
  51. printf("%lld",ans);
  52. return 0;
  53. }

【BZOJ2671】Calc 数学的更多相关文章

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

    题目链接 BZOJ2671 题解 令\(d = (a,b)\),\(a = dx,b = dy\) 那么有 \[ \begin{aligned} d(x + y) | d^2xy \\ (x + y) ...

  2. BZOJ2671 Calc(莫比乌斯反演)

    两个多月之前写的题,今天因为看到一道非常相似的题就翻出来了,发现完全不会,没救. 感觉这个题其实第一步是最难想到的,也是最重要的. 设d=gcd(a,b).那么a=yd,b=xd,且gcd(x,y)= ...

  3. BZOJ2671 : Calc

    设$d=\gcd(a,b),a=xd,b=yd$,则$a+b|ab$等价于$x+y|xyd$. 因为$x,y$互质,所以$x+y|d$. 假设$x<y$,那么对于固定的$x,y$,有$\lflo ...

  4. CSS当中数学表达式calc

    CSS当中数学表达式calc  数学表达式calc()是CSS中的函数,主要用于数学运算.使用calc()为页面元素布局提供了便利和新的思路.本文将介绍calc()的相关内容 定义 数学表达式calc ...

  5. 常用的Css函数

    1. attr() 用来选择元素的属性值,用法:attr(html元素的属性名),正常搭配css content一起使用 html: <p><a href="http:// ...

  6. 理解CSS中的数学表达式calc()

    前面的话 数学表达式calc()是CSS中的函数,主要用于数学运算.使用calc()为页面元素布局提供了便利和新的思路.本文将介绍calc()的相关内容 定义 数学表达式calc()是calculat ...

  7. css3 calc():css简单的数学运算-加减乘除

    css3 calc():css简单的数学运算–加减乘除 多好的东西啊,不用js,一个css就解决了. .box{ border:1px solid #ddd; width:calc(100% - 10 ...

  8. css中的数学表达式calc()

    前言 数学表达式calc()是CSS中的函数,主要用于数学运算.使用calc()为页面元素布局提供了便利和新的思路. 概念 数学表达式calc()是calculate计算的缩写,它允许使用+.-.*. ...

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

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

随机推荐

  1. iOS: 数据持久化方案

    数据持久化方案(如果总结不到位,或者有误的地方,敬请斧正) 一.功能: 主要是将数据持久化到本地,减少对网络请求的次数,既节省了用户的流量,也增强了App的体验效果. 二.种类:  plist存储:使 ...

  2. inet_ntoa内存问题

    最近写的一个程序,大致用到以下代码: WSADATA wsaData; WSAStartup (MAKEWORD( 2, 2 ),&wsaData); struct addrinfo *aiL ...

  3. Java 之外,是 Scala 还是 Groovy?【转载】

    原文地址 Scala 和 Groovy 都是基于 JVM 的语言,相比 Java,它们都有语法更加简明和表达能力更丰富.对于那些既想不脱离开 JVM 又想避免 Java 繁琐语句的开发人员来说,Sca ...

  4. 防止UI界面被输入法遮挡(画面随输入法自适应)

    应用过Android手机的朋友都知道,有时候在文本框中输入文字后,操作按钮被输入法遮挡了,不得不关闭输入法才可以继续操作. 比如下面这个画面: 画面布局: <?xmlversion=" ...

  5. MDX Cookbook 01 - Skipping Axis 合理使用空的 SET 集合获取全部层次结构成员

    假设我们只想显示一些与数据没有任何关联的维度成员信息,并且希望它们能够以行集的形式来显示,那么在 MDX 中就应该直接显示 ROWS  AXIS (1) 并且忽略掉 COLUMNS AXIS(0).比 ...

  6. 使用VirtualBox在Ubuntu下虚拟Windows XP共享文件夹设置方法

    1.首先保证虚拟的Windows XP有虚拟光驱(正常安装的都是有的,因为在ubuntu下一般都是用硬盘虚拟安装的),然后在已经运行起来的Windows XP菜单栏上选择“设备-安装增强功能“,如果不 ...

  7. Mac下用zsh

    最近好多实验要跑,有时候Finder切换来切换去,感觉还不如用terminal. Mac默认的shell是bash.所以说我其实今天才弄明白shell和terminal之间的关系.在人和计算机内核之间 ...

  8. MySQL binlog_format (Mixed,Statement,Row)[转]

    MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点. MySQL ...

  9. Eclipse Unhandled event loop exception GC overhead limit exceeded

    修改Eclipse的配置文件:

  10. vue项目eslint环境配置与vscode配置eslint

    eslint基础环境搭建 全局安装eslint:npm install eslint -g 项目eslint初始化:eslint --init,按团队或自己的编程风格回答三道题. ? How woul ...