题目背景

pj组选手zzq近日学会了求最大公约数的辗转相除法。

题目描述

类比辗转相除法,zzq定义了一个奇怪的函数:

typedef long long ll;
ll f(ll a,ll b)
{
if(a==b) return ;
if(a>b) return f(a-b,b+b)+;
else return f(a+a,b-a)+;
}

zzq定义完这个函数兴高采烈,随便输入了两个数,打算计算f值,发现这个函数死循环了...于是zzq定义这个函数递归死循环的情况下f值为0。

现在zzq输入了一个数n,想要求出

输入输出格式

输入格式:

一行两个数n。

输出格式:

一行一个数

输入输出样例

输入样例#1:

100
输出样例#1:

1124
输入样例#2:

2000
输出样例#2:

68204

说明

对于10%的数据,

对于40%的数据,

对于70%的数据,

对于100%的数据,

数学问题 结论题 分块

似乎很有趣。

要证一个奇奇怪怪的结论:

当且仅当 “ $ a/(gcd(a,b)+b/gcd(a,b)=2^m $ ”时, $ f(a,b) $ 值为 $ m-1 $ ,否则 $ f(a,b)=0 $

一种简单的证明如下:

打表观察,发现上述结论显然成立,得证

另一种并不严谨的证明如下:

只考虑gcd(a,b)=1的情况

证明: $ a+b=2^m $时,$ f(a,b)=m-1 $

当 $a=1$ $b=1$ $ a+b=2^1 $时,显然有$ f(a,b)=1-1=0 $

否则,对于任意 $ a+b=2^m $,假设a<b,那么 $ f(a,b)=f(a+a,b-a)+1 $

由于a+b是2的倍数且a,b互质且a<b,那么b-a肯定是偶数,所以 $ f(a+a,b-a)=f(a*2,b-a)=f(a,(b-a)/2) $

此时$ a+(b-a)/2 = 2_{ }^{m-1} $ ,递归计算可得 $ f(a,b)=m-1 $ 得证。

其他情况乱搞一下发现会死循环

然后愉快(并不)地分块求值。

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define LL long long
using namespace std;
const int mxn=;
LL read(){
LL x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*-''+ch;ch=getchar();}
return x*f;
}
LL n,ans=;
int main(){
n=read();
int lg=;
for(LL i=;i;i<<=){
for(LL x,j=(i>>)+;j<i && j<=n;j=x+){
x=n/(n/j);
x=min(x,min(n,i-));
if(!(x&))x--;
ans+=lg*(n/j)*(((x-j)>>)+);
}
if(i>=n)break;
++lg;
}
ans<<=;
printf("%lld\n",ans);
return ;
}

洛谷P3764 签到题 III的更多相关文章

  1. A 洛谷 P3601 签到题 [欧拉函数 质因子分解]

    题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...

  2. 洛谷P3601签到题(欧拉函数)

    题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...

  3. 洛谷 P3601 签到题

    https://www.luogu.org/problemnew/show/P3601 一道关于欧拉函数的题. 读完题目以后我们知道所谓的$aindao(x)=x- \phi (x) $. 对于x小的 ...

  4. 洛谷3794 签到题IV

    题目描述 给定一个长度为n的序列$a_1,a_2...a_n$,其中每个数都是正整数. 你需要找出有多少对(i,j),$1 \leq i \leq j \leq n$且$gcd(a_i,a_{i+1} ...

  5. 洛谷P3601 签到题

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  6. 【noip】跟着洛谷刷noip题2

    noip好难呀. 上一个感觉有点长了,重开一个. 36.Vigenère 密码 粘个Openjudge上的代码 #include<cstdio> #include<iostream& ...

  7. [洛谷P1707] 刷题比赛

    洛谷题目连接:刷题比赛 题目背景 nodgd是一个喜欢写程序的同学,前不久洛谷OJ横空出世,nodgd同学当然第一时间来到洛谷OJ刷题.于是发生了一系列有趣的事情,他就打算用这些事情来出题恶心大家-- ...

  8. 洛谷P5274 优化题(ccj)

    洛谷P5274 优化题(ccj) 题目背景 CCJCCJ 在前往参加 Universe \ OIUniverse OI 的途中... 题目描述 有一个神犇 CCJCCJ,他在前往参加 Universe ...

  9. 洛谷 P4148 简单题 KD-Tree 模板题

    Code: //洛谷 P4148 简单题 KD-Tree 模板题 #include <cstdio> #include <algorithm> #include <cst ...

随机推荐

  1. PHPcmsv9 还原数据库 操作步骤

    相比dedecms,相同之处:模版好制作,都是开源.不同之处:pc貌似有更好的 负载能力. 言归正传,这两天在捣鼓phpcmsv9程序,但是本地调试好了之后,无论是通过打包方式,还是 转移数据的方式. ...

  2. SQL SERVER技术内幕之6 集合查询

    1.定义 集合运算会对两个输入查询的结果集进行逐行比较,根据比较结果和所使用的集合运算来确定某一行是否应该包含在集合运算的结果中.因为集合运算是针对集合之间进行的计算,所以集合运算涉及的两个查询不能包 ...

  3. java邮件开发

    一.邮件协议: (重点)SMTP:发送邮件的协议.Simple Message Transfer Protocal.默认端口:25 POP:邮局协议(收件协议).Post Office Protoca ...

  4. bzoj4332[JSOI2012]分零食

    一下午被这题的精度续掉了...首先可以找出一个多项式的等比数列的形式,然后类似poj的Matrix Series,不断倍增就可以了.用复数点值表示进行多次的多项式运算会刷刷地炸精度...应当用int存 ...

  5. 【bzoj1672】[USACO2005 Dec]Cleaning Shifts 清理牛棚 dp/线段树

    题目描述 Farmer John's cows, pampered since birth, have reached new heights of fastidiousness. They now ...

  6. hadoop MapReduce辅助排序解析

    1.数据样本,w1.csv到w5.csv,每个文件数据样本2000条,第一列是年份从1990到2000随机,第二列数据从1-100随机,本例辅助排序目标是找出每年最大值,实际上结果每年最大就是100, ...

  7. C++中Map的使用 (个人简单的对于String的使用)

    #include<map> #include<iostream> #include<string> using namespace std; int main() ...

  8. 【刷题】UOJ #34 多项式乘法

    这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 \(n\) 和 \(m\) ,分别表示两个多项式的次数. 第二行 \(n+1\) 个整数,表示第一个多项式的 \( ...

  9. Linux相关——画图软件安装

    其实也不知道算不算Linux相关了... 装个画图软件还是很方便的,刚刚试了一下kolourpaint,感觉还行,就记录下来吧. 先记录几个快捷键emmmm print ---->全屏截图 al ...

  10. Spark2.1.0之初识Spark

    随着近十年互联网的迅猛发展,越来越多的人融入了互联网——利用搜索引擎查询词条或问题:社交圈子从现实搬到了Facebook.Twitter.微信等社交平台上:女孩子们现在少了逛街,多了在各大电商平台上的 ...