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

题目

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

分析

设\(gcd(a,b)=d,a'd=a,b'd=b\)
那么\(a'+b'|a'b'd\)
因为\(gcd(a',b')=1\)
所以\(a'+b'|d\)。
又因为\((a'+b')d<=n\)
则\(a'+b'=\sqrt n\)
枚举\(a'+b'=i\)
\(d就有\dfrac{n}{i^2}种情况\)
因为\(gcd(a',b')=gcd(a'+b',a')\)
所以\(a'和b'又有\varphi(i)种\)
线筛求\(\varphi()\),时间复杂度\(O(\sqrt n)\)

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
const int mo=1000000007;
const int N=10000005;
using namespace std;
long long ans;
long long n,qn,r,phi[N],p[N];
bool bz[N];
long long gcd(long long x,long long y)
{
    for(;y;)
    {
        r=x%y;
        x=y;
        y=r;
    }
    return x;
}
int main()
{
    scanf("%lld",&n);
    qn=sqrt(n);
    phi[1]=1;
    memset(bz,true,sizeof(bz));
    for(long long i=2;i<=qn;i++)
    {
        if(bz[i])
        {
            bz[i]=false;
            p[++p[0]]=i;
            phi[i]=i-1;
        }
        for(long long j=1;j<=p[0] && i*p[j]<=qn;j++)
        {
            bz[i*p[j]]=false;
            if(i%p[j]) phi[i*p[j]]=phi[i]*(p[j]-1);
            else
            {
                phi[i*p[j]]=phi[i]*p[j];
                break;
            }
        }
        ans+=(long long)phi[i]*(long long)(n/i/i);
    }
    printf("%lld",ans);
}

原文地址:https://www.cnblogs.com/chen1352/p/9066604.html

时间: 2024-11-05 23:23:20

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

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

题目 幻魔皇拉比艾尔很喜欢斐波那契树,他想找到神奇的节点对. 所谓斐波那契树,根是一个白色节点,每个白色节点都有一个黑色节点儿子,而每个黑色节点则有一个白色和一个黑色节点儿子.神奇的节点对则是指白色节点对. 请问对于深度为n的斐波那契树,其中距离为i的神奇节点对有多少个?拉比艾尔需要你对于1<=i<=2n的所有i都求出答案. 分析 我们找一找每层黑点和白点的规律 |层数|白点数|黑点数| |:-|:---|:----| |1|1|0| |2|0|1| |3|1|1| |4|1|2| |5|2|

计蒜客NOIP2017提高组模拟赛(五)day1-展览

传送门 发现这题选或不选对状态的优劣程度不会产生影响,如果已经确定了两个数a和b,那么最优的首项和公比也都是唯一确定的, 与对于后面的数x,加进去也好不加进去也好,首项和公比依旧是原来的 于是我们用尺取算法,用两个指针来扫一遍, 如果只有一个数且下一个数能被整除,就加进去,然后确定首项和公比 如果只有一个数且下一个数不能整除,两个指针直接指向下一个数 如果有多个数且下一个数满足公式,就加进来 如果有多个数且下一个数不满足公式,两个指针直接指向下一个数 这样对于最优解,一定是可以找到的 顺便说下最

ZROI提高组模拟赛05总结

ZROI提高组模拟赛05总结 感觉是目前为止最简单的模拟赛了吧 但是依旧不尽人意... T1 有一半的人在30min前就A掉了 而我花了1h11min 就是一个简单的背包,我硬是转化了模型想了好久,生生把一个弱智题变成了一个不可做题 最后竟然在转化两次后的模型上以为自己做出来了 这个题比别人多花的1h左右的时间,而且只得到了30分,成为了这场比赛失败的关键因素 T2 依旧是一道简单题 有人20min之内就A掉了 感觉放在CF里最多算一道Div2 D,还是简单的那种 可是我又一次想复杂了 大意就是

神炎皇(模拟测试67)(数论)

神炎皇: 题意: 对于一个整数对$(a,b)$,若满足$a+b<=n$且$a+b$是$a*b$的因子,则成为神奇的数对.请问这样的数对共有多少个?($N<=10^{14}$) 题解: 已知$a+b<=n\\ (a+b)|ab$. 设$d=\gcd(a,b),x=a/d,y=b/d$. 上式为$(x+y)*d<=n(1)\\ (x+y)|x*y*d(2)$. 因为$\gcd(x+y,x)=\gcd(x+y,y)=\gcd(x,y)=1$. (2)式可化减为$(x+y)|d$. 又由(

[CSP-S模拟测试]:神炎皇(数学)

题目描述 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对$(a,b)$,若满足$a+b\leqslant n$且$a+b$是$ab$的因子,则称为神奇的数对.请问这样的数对共有多少呢? 输入格式 一行一个整数$n$. 输出格式 一行一个整数表示答案,保证不超过$64$位整数范围. 样例 样例输入: 21 样例输出: 11 数据范围与提示 对于$20\%$的数据,$n\leqslant 1000$:对于$40\%$的数据,$n\leqslant 100000$:对于$60\%$的数据

提高组模拟赛总结(1)

T1 : 题意:给定一个连续的颜色序列,至多可以去掉k种颜色,问能得到的最大连续单个颜色长度是多少 n <= 10 ^ 5 做法:考试的时候十分斯波,在统计的时候写了线段树统计,实际上根本不用 维护了两个指针表示当前的序列,离散化后用桶维护每一个颜色的数量,如果颜色 <= k + 1就一直加颜色进来,不然就一直移动左指针删除颜色,每次改变某一颜色数量时更新一下最大值就好了 T2: 题意:(实在没办法总结一句话题意了ORZ,总之是个变种的Lis)有 n 个节目,其描述了在 Ti时 刻 Xi号社团

[SinGuLaRiTy] NOIP2017 提高组

[SinGuLaRiTy-1048] Copyright (c) SinGuLaRiTy 2018. All Rights Reserved. NOIP2017过了这么久,现在2018了才找到寒假这么一个空挡来写题解.哎,没办法,谁叫学校抓的紧呢. 序 | Before 这是我的最后一次NOIP. 因为是最后一次的原因吧,考前压力就蛮大的,再加上各种模拟赛,模板练习的轮番轰炸,走进考场时整个人都是“飘飘欲仙”的感觉~ 我的NOIP2017就在这种“飘飘欲仙”的氛围下开始了. 游记 | Blogs

提高组模拟赛总结(3)

貌似是tyvj 2012年的题? T1:给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都能够到达终点.绿豆蛙从起点出发,走向终点. 到达每一个顶点时,如果有K条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 1/K . 现在绿豆蛙想知道,从起点走到终点的所经过的路径总长度期望是多少? 刚看到题目,歪歪斜斜的每页上都写着'水题'几个字.我横竖睡不着,仔细看了半夜,才从字缝里看出字来,满本都写着一个字是'坑'!" 显然

NOIP2017提高组-滚粗记

这次是真的滚粗了 感觉自己被欺骗了 本来还以为自己一等应该可以的,但是如今事实就这么摆着,想哭也没有用了 DAY -1:在机房里整理了些模板,担心这个要考又担心那个要考 DAY 0:早上又看了会儿模板,中午就出发了,差不多晚上5点多到的帝京(酒店好像还不错噢),过了一会儿就出发去衢二中领证吃饭了,晚上回来就在房间里面颓废,睡得也挺晚的 DAY 1:早上6点被闹钟叫醒,8:30考试,还有点小紧张,T1看了好久一直不会,找了几个样例后发现好像有规律但是又找不到,挺急的!后来不知道怎么就感觉找到规律了