题目描述

神炎皇乌利亚很喜欢数对,他想找到神奇的数对。

对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对。请问这样的数对共有多少呢?

数据范围

对于100%的数据n<=100000000000000。

=w=

引理一

两个互质的数之差与这两个数互质。

证明:

证明依赖于欧几里得算法的gcd(a,b)=gcd(b,a−b)。

1.设a>b,r=(a,b),则有r|a,r|b,表示成a=a′∗r,b=b′∗r。

则有(b,a−b)=(b′∗r,(a′−b′)∗r),显然(b,a−b)也有r这个公约数。

2.设r=(a,b),则有r|a,r|b,表示成a=a′∗r,b=b′∗r。

则有(a+b,a)=((a′+b′)∗r,a′∗r),显然(a+b,a)也有r这个公约数。

综合1,2,(a,b)的公约数也是(b,a−b)的公约数,所以gcd(a,b)=gcd(b,a−b)。

回到原命题,gcd(p,q)=1⇒gcd(q,p−q)=1。

引理二

两个互质的数的和与积互质。

证明:

设gcd(p,q)=1,

根据引理一,则有

gcd(p+q,q)=gcd(q,p)=1,gcd(p+q,p)=gcd(p,q)=1

也就是说(p+q)与p和q都互质,必然就和pq互质。

正文

若(a,b)合法,那么存在(a+b)|ab

设d=gcd(a,b),并且a′∗d=a,b′∗d=b。

那么就有(a′+b′)d|a′b′d2,即(a′+b′)|a′b′d。


根据引理二,又a′与b′互质,则(a′+b′)|d。

题设有a+b<=n,那么(a′+b′)d<=n。


由(a′+b′)|d,d至少为(a′+b′)。

又(a′+b′)d<=n,那么(a′+b′)<=n√。


不妨枚举i=(a′+b′),这样d就只能取n/i个了,每隔i个有一个d|i。

所以合法的d就有n/i2个。

再来考虑符合(a′+b′)=i的个数,由引理一:

如果存在一个gcd(c,i)=1,那么必然存在一个gcd(c,i−c)=1。

于是乎,(a′+b′)=i的个数即为φ(i),可用线性筛法预处理。


综上,ans=∑n√i=2ni2∗φ(i)。

时间复杂度为O(n√)。

代码

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define ll long long
using namespace std;
const char* fin="uria.in";
const char* fout="uria.out";
const int inf=0x7fffffff;
const int maxn=10000007;
ll n,i,j,k,nq;
ll ans;
ll p[maxn],phi[maxn];
bool bz[maxn];
int main(){
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%lld",&n);
nq=(ll)sqrt(n);
for (i=2;i<=nq;i++){
if (bz[i]==false){
phi[i]=i-1;
p[++p[0]]=i;
ans+=phi[i]*(n/i/i);
}
for (j=1;j<=p[0];j++){
k=i*p[j];
if (k>nq) break ;
if (i%p[j]==0) phi[k]=phi[i]*p[j];
else phi[k]=phi[i]*(p[j]-1);
bz[k]=true;
ans+=phi[k]*(n/k/k);
if (i%p[j]==0) break;
}
}
printf("%lld\n",ans);
return 0;
}

=o=

线性筛法求欧拉函数

首先有通式,

φ(p1k1∗p2k2∗...∗pnkn)=(p1−1)∗p1k1−1∗(p2−1)∗p2k2−1∗...∗(pn−1)∗pnkn−1。

显然用线筛通过简单转移可以得到。

~

一开始我也考虑分析这个东西,

(a,b)合法就有(a′+b′)|a′b′d。

然后就不会了。

并没有考虑到gcd(a′+b′,a′b′)=1这个性质。

日后这种数论计数问题,先从合法的开始分析。

如果涉及倍数关系,可以考虑排除一些不作贡献的干扰项。

【JZOJ4919】【NOIP2017提高组模拟12.10】神炎皇的更多相关文章

  1. 【NOIP2017提高组模拟12.10】幻魔皇

    题目 幻魔皇拉比艾尔很喜欢斐波那契树,他想找到神奇的节点对. 所谓斐波那契树,根是一个白色节点,每个白色节点都有一个黑色节点儿子,而每个黑色节点则有一个白色和一个黑色节点儿子.神奇的节点对则是指白色节 ...

  2. 【JZOJ4921】【NOIP2017提高组模拟12.10】幻魔皇

    题目描述 幻魔皇拉比艾尔很喜欢斐波那契树,他想找到神奇的节点对. 所谓斐波那契树,根是一个白色节点,每个白色节点都有一个黑色节点儿子,而每个黑色节点则有一个白色和一个黑色节点儿子.神奇的节点对则是指白 ...

  3. 【NOIP2017提高组模拟12.10】神炎皇

    题目 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 分析 设\(gcd(a,b)= ...

  4. 【JZOJ4920】【NOIP2017提高组模拟12.10】降雷皇

    题目描述 降雷皇哈蒙很喜欢雷电,他想找到神奇的电光. 哈蒙有n条导线排成一排,每条导线有一个电阻值,神奇的电光只能从一根导线传到电阻比它大的上面,而且必须从左边向右传导,当然导线不必是连续的. 哈蒙想 ...

  5. NOIP2017提高组模拟赛 10 (总结)

    NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...

  6. 【NOIP2017提高组模拟12.24】B

    题目 现在你有N个数,分别为A1,A2,-,AN,现在有M组询问需要你回答.每个询问将会给你一个L和R(L<=R),保证Max{Ai}-Min{Ai}<=R-L,你需要找出并输出最小的K( ...

  7. 求hack or 证明(【JZOJ 4923】 【NOIP2017提高组模拟12.17】巧克力狂欢)

    前言 本人在此题有一种不是题解的方法,但无法证明也找不到反例. 如果各位大神有反例或证明请发至 邮箱:qq1350742779@163.com Description Alice和Bob有一棵树(无根 ...

  8. 【JZOJ4928】【NOIP2017提高组模拟12.18】A

    题目描述 数据范围 对于100%的数据,n<=100000,1<=A[i]<=5000 =w= Ans=∏1ai 代码 #include<iostream> #inclu ...

  9. 【NOIP2017提高组模拟12.17】环

    题目 小A有一个环,环上有n个正整数.他有特殊的能力,能将环切成k段,每段包含一个或者多个数字.对于一个切分方案,小A将以如下方式计算优美程度: 首先对于每一段,求出他们的数字和.然后对于每段的和,求 ...

随机推荐

  1. 【codeforces 507E】Breaking Good

    [题目链接]:https://vjudge.net/contest/164884#problem/D [题意] 给你一张图; 图中有些路是完好的;但有些路还没修好; 先不管路有没有修好; 问你从起点到 ...

  2. day21 作业

    1.定义MySQL类 1.对象有id.host.port三个属性 2.定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一 3.提供两种实例化方式,方式一:用户传入host和po ...

  3. Django项目:CRM(客户关系管理系统)--56--47PerfectCRM实现CRM客户报名流程01

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  4. ajax发送验证码

    $.ajax({     url:url,     type:"POST",     data:data,     dataType:"JSON",     s ...

  5. light oj 1105 规律

    #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...

  6. git commit规范工具

    npm install -g commitizen commitizen init cz-conventional-changelog --save --save-exact 以后,凡是用到git c ...

  7. PAT甲级——A1051 Pop Sequence

    Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...

  8. PAT甲级——A1018 Public Bike Management

    There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...

  9. DLL编程总结

    进行DLL的编程主要涉及到两个方面的问题,一个是要保证DLL中要导出的函数名不被编译器不可控地更改(在C++中由于重载机制的存在,会造成程序被编译时函数名被改变),其实就是要保证DLL导出的函数名与使 ...

  10. 探索SpringBoot中的SpringMVC

    spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc.spring mvc 是只是spring 处理web层请求的一个模块 ...