【BZOJ2671】Calc 数学
【BZOJ2671】Calc
Description
1.1<=a<b<=N
2.a+b整除a*b
Input
一行一个数N
Output
一行一个数表示答案
Sample Input
Sample Output
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了吗?复杂度什么的见鬼去吧~
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- #include <cmath>
- using namespace std;
- typedef long long ll;
- const int N=100010;
- ll n,m,ans;
- int num;
- int np[N],pri[N],mu[N];
- inline ll calc(int n,int m)
- {
- ll ret=0;
- int i,j,t,last;
- //for(i=1;i<=m;i++) for(j=1;j<i;j++) ret+=n/i/(i+j);
- //return ret;
- for(i=1;i<=m;i++)
- {
- t=n/i;
- for(j=i+1;j<(i<<1)&&j<=t;j=last+1)
- {
- last=min((i<<1)-1,t/(t/j));
- ret+=1ll*(last-j+1)*(t/j);
- }
- }
- return ret;
- }
- ll gcd(ll a,ll b)
- {
- return !b?a:gcd(b,a%b);
- }
- int main()
- {
- scanf("%lld",&n),m=sqrt(n);
- int i,j;
- ll last;
- mu[1]=1;
- //for(i=1;i<=m;i++) for(j=1;j<i;j++) if(gcd(i,j)==1) ans+=n/i/(i+j);
- //printf("%lld\n",ans),ans=0;
- for(i=2;i<=m;i++)
- {
- if(!np[i]) pri[++num]=i,mu[i]=-1;
- for(j=1;j<=num&&i*pri[j]<=m;j++)
- {
- np[i*pri[j]]=1;
- if(i%pri[j]==0) break;
- mu[i*pri[j]]=-mu[i];
- }
- }
- for(i=1;i<=m;i++) last=calc(n/i/i,m/i),ans+=mu[i]*last;
- printf("%lld",ans);
- return 0;
- }
【BZOJ2671】Calc 数学的更多相关文章
- BZOJ2671 Calc 【莫比乌斯反演】
题目链接 BZOJ2671 题解 令\(d = (a,b)\),\(a = dx,b = dy\) 那么有 \[ \begin{aligned} d(x + y) | d^2xy \\ (x + y) ...
- BZOJ2671 Calc(莫比乌斯反演)
两个多月之前写的题,今天因为看到一道非常相似的题就翻出来了,发现完全不会,没救. 感觉这个题其实第一步是最难想到的,也是最重要的. 设d=gcd(a,b).那么a=yd,b=xd,且gcd(x,y)= ...
- 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 ...
- CSS当中数学表达式calc
CSS当中数学表达式calc 数学表达式calc()是CSS中的函数,主要用于数学运算.使用calc()为页面元素布局提供了便利和新的思路.本文将介绍calc()的相关内容 定义 数学表达式calc ...
- 常用的Css函数
1. attr() 用来选择元素的属性值,用法:attr(html元素的属性名),正常搭配css content一起使用 html: <p><a href="http:// ...
- 理解CSS中的数学表达式calc()
前面的话 数学表达式calc()是CSS中的函数,主要用于数学运算.使用calc()为页面元素布局提供了便利和新的思路.本文将介绍calc()的相关内容 定义 数学表达式calc()是calculat ...
- css3 calc():css简单的数学运算-加减乘除
css3 calc():css简单的数学运算–加减乘除 多好的东西啊,不用js,一个css就解决了. .box{ border:1px solid #ddd; width:calc(100% - 10 ...
- css中的数学表达式calc()
前言 数学表达式calc()是CSS中的函数,主要用于数学运算.使用calc()为页面元素布局提供了便利和新的思路. 概念 数学表达式calc()是calculate计算的缩写,它允许使用+.-.*. ...
- 【BZOJ2671】Calc(莫比乌斯反演)
[BZOJ2671]Calc 题面 BZOJ 给出N,统计满足下面条件的数对(a,b)的个数: 1.\(1\le a\lt b\le N\) 2.\(a+b\)整除\(a*b\) 我竟然粘了题面!!! ...
随机推荐
- iOS: 数据持久化方案
数据持久化方案(如果总结不到位,或者有误的地方,敬请斧正) 一.功能: 主要是将数据持久化到本地,减少对网络请求的次数,既节省了用户的流量,也增强了App的体验效果. 二.种类: plist存储:使 ...
- inet_ntoa内存问题
最近写的一个程序,大致用到以下代码: WSADATA wsaData; WSAStartup (MAKEWORD( 2, 2 ),&wsaData); struct addrinfo *aiL ...
- Java 之外,是 Scala 还是 Groovy?【转载】
原文地址 Scala 和 Groovy 都是基于 JVM 的语言,相比 Java,它们都有语法更加简明和表达能力更丰富.对于那些既想不脱离开 JVM 又想避免 Java 繁琐语句的开发人员来说,Sca ...
- 防止UI界面被输入法遮挡(画面随输入法自适应)
应用过Android手机的朋友都知道,有时候在文本框中输入文字后,操作按钮被输入法遮挡了,不得不关闭输入法才可以继续操作. 比如下面这个画面: 画面布局: <?xmlversion=" ...
- MDX Cookbook 01 - Skipping Axis 合理使用空的 SET 集合获取全部层次结构成员
假设我们只想显示一些与数据没有任何关联的维度成员信息,并且希望它们能够以行集的形式来显示,那么在 MDX 中就应该直接显示 ROWS AXIS (1) 并且忽略掉 COLUMNS AXIS(0).比 ...
- 使用VirtualBox在Ubuntu下虚拟Windows XP共享文件夹设置方法
1.首先保证虚拟的Windows XP有虚拟光驱(正常安装的都是有的,因为在ubuntu下一般都是用硬盘虚拟安装的),然后在已经运行起来的Windows XP菜单栏上选择“设备-安装增强功能“,如果不 ...
- Mac下用zsh
最近好多实验要跑,有时候Finder切换来切换去,感觉还不如用terminal. Mac默认的shell是bash.所以说我其实今天才弄明白shell和terminal之间的关系.在人和计算机内核之间 ...
- MySQL binlog_format (Mixed,Statement,Row)[转]
MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点. MySQL ...
- Eclipse Unhandled event loop exception GC overhead limit exceeded
修改Eclipse的配置文件:
- vue项目eslint环境配置与vscode配置eslint
eslint基础环境搭建 全局安装eslint:npm install eslint -g 项目eslint初始化:eslint --init,按团队或自己的编程风格回答三道题. ? How woul ...