[CSP-S模拟测试]:神炎皇(数学)
题目描述
神炎皇乌利亚很喜欢数对,他想找到神奇的数对。
对于一个整数对$(a,b)$,若满足$a+b\leqslant n$且$a+b$是$ab$的因子,则称为神奇的数对。请问这样的数对共有多少呢?
输入格式
一行一个整数$n$。
输出格式
一行一个整数表示答案,保证不超过$64$位整数范围。
样例
样例输入:
21
样例输出:
11
数据范围与提示
对于$20\%$的数据,$n\leqslant 1000$;
对于$40\%$的数据,$n\leqslant 100000$;
对于$60\%$的数据,$n\leqslant 10000000$;
对于$80\%$的数据,$n\leqslant 1000000000000$;
对于$100\%$的数据,$n\leqslant 100000000000000$。
题解
总是喜欢在考场上刚数学题,总是刚不出来,总是就差一步……
不妨设一个神奇的数对$(a,b)$,$d=gcd(a,b)$,$a'=\frac{a}{d}$,$b'=\frac{b}{d}$。
我们要满足$(a+b)|ab$($|$为整除),也就是要满足$(a'+b')d|(a'b')d^2$
消去一个$d$,则我们可以得到$(a'+b')|(a'b')d$。
又$\because gcd(a',b')=1$,根据辗转相除法还可以得到$(a'+b',a')=(a'+b',b')=1$(手打$gcd$的方法),$\therefore gcd(a'+b',a'b')=1$。
也就是说$(a'+b')$一定不是$a'b'$的因子,那么其只能是$d$的因子,则条件转化为求$(a'+b')|d$。
不妨设$m=(a'+b'),d=km$,则$km^2\leqslant n$。
而$m$只用枚举到$\sqrt{n}$即可。
发现对于每一个$m$,$k$有$\left\lfloor\frac{n}{m^2}\right\rfloor$种不同的解。
接下来考虑$m$的内部情况,接着利用辗转相除法,可以得到其个数为$\phi(i)$,于是答案就是:
$$\sum \limits_{i=1}^n \phi(i)\left\lfloor\frac{n}{m^2}\right\rfloor$$
时间复杂度:$\Theta(\sqrt{n})$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
long long n;
long long ans;
int phi[10000001],prime[10000001];
bool vis[10000001];
int main()
{
scanf("%lld",&n);
int sqr=sqrt(n);
phi[1]=1;
for(int i=2;i<=sqr;i++)
{
if(!vis[i])
{
vis[i]=1;
prime[++prime[0]]=i;
phi[i]=i-1;
}
for(int j=1;j<=prime[0]&&i*prime[j]<=sqr;j++)
{
vis[i*prime[j]]=1;
if(i%prime[j])phi[i*prime[j]]=phi[i]*(prime[j]-1);
else{phi[i*prime[j]]=phi[i]*prime[j];break;}
}
ans+=1LL*phi[i]*(n/i/i);
}
printf("%lld",ans);
return 0;
}
rp++
[CSP-S模拟测试]:神炎皇(数学)的更多相关文章
- csps模拟67神炎皇,降雷皇,幻魔皇题解
题面:https://www.cnblogs.com/Juve/articles/11648975.html 神炎皇: 打表找规律?和$\phi$有关? 答案就是$\sum\limits_{i=2}^ ...
- 【NOIP2017提高组模拟12.10】神炎皇
题目 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 分析 设\(gcd(a,b)= ...
- 【JZOJ4919】【NOIP2017提高组模拟12.10】神炎皇
题目描述 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 数据范围 对于100%的数 ...
- NOIP模拟26「神炎皇·降雷皇·幻魔皇」
T1:神炎皇 又是数学题,气死,根本不会. 首先考虑式子\(a+b=ab\),我们取\(a\)与\(b\)的\(gcd\):\(d\),那么式子就可以改写成: \[(a'+b')*d=a'b' ...
- 「10.10」神炎皇(欧拉函数)·降雷皇(线段树,DP)·幻魔皇
A. 神炎皇 很好的一道题,可能第一次在考场上遇到欧拉函数 题意:对于一个整数对 $(a,b)$,若满足 $a\times b\leq n$且$a+b$是$a\times b$的因子, 则称为神奇的数 ...
- NOIP 模拟 $26\; \rm 神炎皇$
题解 \(by\;zj\varphi\) 一道 \(\varphi()\) 的题. 对于一个合法的数对,设它为 \((a*m,b*m)\) 则 \(((a+b)*m)|a*b*m^2\),所以 \(( ...
- [CSP-S模拟测试]:题(DP+数学)
题目描述 出个题就好了.这就是出题人没有写题目背景的原因.你在平面直角坐标系上.你一开始位于$(0,0)$.每次可以在上/下/左/右四个方向中选一个走一步.即:从$(x,y)$走到$(x,y+1),( ...
- [CSP-S模拟测试]:降雷皇(DP+树状数组)
题目描述 降雷皇哈蒙很喜欢雷电,他想找到神奇的电光.哈蒙有$n$条导线排成一排,每条导线有一个电阻值,神奇的电光只能从一根导线传到电阻比它大的上面,而且必须从左边向右传导,当然导线不必是连续的.哈蒙想 ...
- [CSP-S模拟测试]:C(倍增+数学)
题目传送门(内部题152) 输入格式 第一行两个整数$N,Q$. 接下来一行$N$个整数,第$i$个为$a_i$. 接下来的$N-1$行,每行两个整数$u,v$.表示$u,v$之间有一条边. 接下来的 ...
随机推荐
- Python笔记(二十四)_魔法方法_运算符的魔法方法
算数运算方法 .反运算方法 以对象A+对象B为例,都是将A作为self值,而B作为other值传入__add__(self,other)方法: 当用户输入A+B,就会调用重写的add方法: >& ...
- 【SD系列】SAP SD模块-公司间销售简介
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SD系列]SAP SD模块-公司间销售简介 ...
- Spring Boot 之 springcache的使用
一.开启 springcache,启动类添加 @EnableCaching 注解 @SpringBootApplication @EnableCaching public class Gatherin ...
- 关于this在不同使用情况表示的含义
1. addEventListener 函数中的this 指向的是出发事件的事件源 obj.addEventListener('click',function(){ console.log(thi ...
- C语言第七周作业
每个单词的最后一个字母改成大写 函数fun的功能是:将p所指字符串中每个单词的最后一个字母改成大写.(这里的"单词"是指由空格隔开的字符串). 函数接口定义: void fun( ...
- How to increase timeout for your ASP.NET Application ?
How to increase timeout for your ASP.NET Application ? 原文链接:https://www.techcartnow.com/increase-tim ...
- SpringBoot(五) -- SpringBootWeb登录示例
一.解决index.html访问 在SpringBoot中默认访问的首页是静态资源文件夹下的index.html,无法被Thymeleaf模板引擎解析,因此我们可以定义一个controller将默认请 ...
- linux复杂命令
1,查看包含zypper且不包含ar的进程信息的2,3,8,9列信息 ps -ef|grep zypper|grep -v ar|awk '{print $2,$3,$8,$9}' eg:查看包含zy ...
- Spring事务管理之几种方式实现事务(转)
一:事务认识 大家所了解的事务Transaction,它是一些列严密操作动作,要么都操作完成,要么都回滚撤销.Spring事务管理基于底层数据库本身的事务处理机制.数据库事务的基础,是掌握Spring ...
- ES6判断当前页面是否微信浏览器中打开
1.使用jq判断是否用微信浏览器打开页面 var is_weixin = (function(){return navigator.userAgent.toLowerCase().indexOf('m ...