bzoj4173 数学

欧拉\(\varphi\)函数,变形还是很巧妙的

求:

\[\varphi(n)\cdot\varphi(m)\cdot\sum_{n\bmod k+m\bmod k\ge k}\varphi(k)\bmod 998244353,n,m\le 10^{15}
\]


首先,对\(\sum\)下面那一坨进行变形

很容易知道,\(n\bmod k+m\bmod k=n-\lfloor\dfrac{n}{k}\rfloor\cdot k+m-\lfloor\dfrac{m}{k}\rfloor\cdot k<2k\)

那么对不等式同时除以\(k\),就是\(1\le \dfrac{n+m}{k}-\lfloor\dfrac{n}{k}\rfloor-\lfloor\dfrac{m}{k}\rfloor<2\)

然后把那个\(\frac{n+m}{k}\)来个下取整,这个式子就变成了\(1\),也就是:

\[\lfloor\frac{n+m}{k}\rfloor-\lfloor\frac{n}{k}\rfloor-\lfloor\frac{m}{k}\rfloor=1
\]

所以只看那个\(\sum\)就是:

\[\sum_{\lfloor\frac{n+m}{k}\rfloor-\lfloor\frac{n}{k}\rfloor-\lfloor\frac{m}{k}\rfloor=1}\varphi(k)
\]

然后又由于\(\lfloor\dfrac{n+m}{k}\rfloor-\lfloor\dfrac{n}{k}\rfloor-\lfloor\dfrac{m}{k}\rfloor=1\)只有\(0,1\)两个值,是\(1\)符合要求是\(0\)不符合,所以可以把上式继续拆:

\[\sum_{k=1}^{n+m}\varphi(k)\cdot(\lfloor\frac{n+m}{k}\rfloor-\lfloor\frac{n}{k}\rfloor-\lfloor\frac{m}{k}\rfloor)
\]

\[\sum_{k=1}^{n+m}\varphi(k)\lfloor\frac{n+m}{k}\rfloor-\sum_{k=1}^n\varphi(k)\lfloor\frac{n}{k}\rfloor-\sum_{k=1}^m\varphi(k)\lfloor\frac{m}{k}\rfloor
\]


下面考虑如何求\(\sum_{i=1}^n\varphi(i)\lfloor\dfrac{n}{i}\rfloor\)就行了

想要推这个,先证明一个结论:\(n=\sum_{d\mid n}\varphi(d)\)

列举出如下分数:

\(\dfrac{1}{n},\dfrac{2}{n},\cdots,\dfrac{n}{n}\)

然后把他们化简

当且仅当\(d\mid n,\gcd(a,d)=1\),分数\(\frac{a}{d}\)出现在其中

那么,以\(d\)为分母的分数有\(\varphi(d)\)个,\(d\)可以取遍\(n\)的所有因数

又因为这些分数的个数是\(n\),所以\(n=\sum_{d\mid n}\varphi(d)\)

那么把\(\sum\)里面那一些,理解为\(\lfloor\frac{n}{i}\rfloor\)个\(\varphi(i)\)相加

而从\(1\)到\(n\)中,有\(\lfloor\frac{n}{i}\rfloor\)个数是\(i\)的倍数,所以我们枚举这\(n\)个数:

\[\sum_{i=1}^n\varphi(i)\lfloor\dfrac{n}{i}\rfloor=\sum_{j=1}^n\sum_{i\mid j}\varphi(i)
\]

然后用刚才说的结论,变形为:

\[\sum_{j=1}^n j
\]

所以答案就清晰了:

\[\varphi(n)\cdot\varphi(m)\cdot\sum_{n\bmod k+m\bmod k\ge k}\varphi(k)=\varphi(n)\cdot\varphi(m)\cdot(\sum_{i=1}^{n+m}i-\sum_{i=1}^n i-\sum_{i=1}^m i)=\varphi(n)\cdot\varphi(m)\cdot n\cdot m
\]


最后由于数很大一定要频繁取模

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstring>
#define reg register
#define EN std::puts("")
#define LL long long
inline LL read(){
register LL x=0;register int y=1;
register char c=std::getchar();
while(c<'0'||c>'9'){if(c=='-') y=0;c=std::getchar();}
while(c>='0'&&c<='9'){x=x*10+(c^48);c=std::getchar();}
return y?x:-x;
}
#define mod 998244353
inline LL phi(LL x){
reg LL ret=x;
int sqrt=std::ceil(std::sqrt(x));
for(reg int i=2;i<=sqrt;i++){
if(!(x%i)) ret=ret/i*(i-1);
while(!(x%i)) x/=i;
}
if(x>1) ret=ret/x*(x-1);
return ret;
}
int main(){
LL n=read(),m=read();
std::printf("%lld",phi(n)%mod*(phi(m)%mod)%mod*(n%mod)%mod*(m%mod)%mod);
return 0;
}

bzoj4173 数学的更多相关文章

  1. 【BZOJ4173】数学 欧拉函数神题

    [BZOJ4173]数学 Description Input 输入文件的第一行输入两个正整数 . Output 如题 Sample Input 5 6 Sample Output 240 HINT N ...

  2. 【BZOJ-4173】数学 欧拉函数 + 关于余数的变换

    4173: 数学 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 306  Solved: 163[Submit][Status][Discuss] D ...

  3. 「BZOJ4173」数学

    题面 已知 \[\large{S(n,m)=\{k_{1},k_{2},\cdots k_{i}\}}\] 且每个 \(k\) 满足 \[\large{n \%k+m\%k\geq k}\] 求 \[ ...

  4. 【BZOJ4173】数学 题解(数论)

    前言:体验到了推式子的快感orz 题目大意:求$\varphi(n)*\varphi(m)*\sum_{n\ mod\ k+m\ mod\ k\geq k} \varphi(k)\ mod\ 9982 ...

  5. 数学思想:为何我们把 x²读作x平方

    要弄清楚这个问题,我们得先认识一个人.古希腊大数学家 欧多克索斯,其在整个古代仅次于阿基米德,是一位天文学家.医生.几何学家.立法家和地理学家. 为何我们把 x²读作x平方呢? 古希腊时代,越来越多的 ...

  6. 速算1/Sqrt(x)背后的数学原理

    概述 平方根倒数速算法,是用于快速计算1/Sqrt(x)的值的一种算法,在这里x需取符合IEEE 754标准格式的32位正浮点数.让我们先来看这段代码: float Q_rsqrt( float nu ...

  7. MarkDown+LaTex 数学内容编辑样例收集

    $\color{green}{MarkDown+LaTex 数学内容编辑样例收集}$ 1.大小标题的居中,大小,颜色 [例1] $\color{Blue}{一元二次方程根的分布}$ $\color{R ...

  8. 深度学习笔记——PCA原理与数学推倒详解

    PCA目的:这里举个例子,如果假设我有m个点,{x(1),...,x(m)},那么我要将它们存在我的内存中,或者要对着m个点进行一次机器学习,但是这m个点的维度太大了,如果要进行机器学习的话参数太多, ...

  9. Sql Server函数全解<二>数学函数

    阅读目录 1.绝对值函数ABS(x)和返回圆周率的函数PI() 2.平方根函数SQRT(x) 3.获取随机函数的函数RAND()和RAND(x) 4.四舍五入函数ROUND(x,y) 5.符号函数SI ...

随机推荐

  1. 【Canvas】(1)---概述+简单示例

    Canvas---概述+简单示例 如果通俗的去理解Canvas,我们可以去理解成它类似于我们电脑自带的画图工具一样,canvas首先是选择一块画布,然后在这个画布上描绘我们想画的东西,画好后展示给用户 ...

  2. 二、Python2.7的安装并与Python3.8共存

    一:Python解释器为什么要2个版本? 众所周知,Python2.7是一个过渡版本. 很多公司写的项目并不是基于最新的Python3写的,在之后进行一些项目更改的时候,Python3的语法有一些并不 ...

  3. AJ学IOS(09)UI之UIScrollView代理触摸实现_图片缩放

    AJ分享,必须精品 先看效果 代码 // // NYViewController.m // 05-放大缩小图片UIScrollView // // Created by apple on 15-3-2 ...

  4. 浅谈requests库

    本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 安装 pip install requests # 是requests而不是request(有s的) re ...

  5. 三个步骤就能让你轻松掌握Python爬虫

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:NicePython PS:如有需要Python学习资料的小伙伴可以加 ...

  6. work of weekend 12/12/2015~12/14/2015

    part 组员                周末工作+今日工作 工作耗时/h 明日计划 工作耗时/h backup 冯晓云 try the backup plan:brower:rewrite bi ...

  7. Problem L. World Cup

    题目大意:有A,B,C,D四个队伍,两两之间有一个比赛,假如A和B比赛,如果平局,各加一分,如果说A胜,给A加3分,不给B加分,B胜同理 给出A,B,C,D,的得分,判断形成这种局面有多少种方式. 思 ...

  8. file_put_contens小trick

    file_put_contents tricks 0x01 trick1 来自于P神的实例: <?php $text = $_GET['text']; if(preg_match('[<& ...

  9. Ubuntu16.04 安装eclipse

    首先确保自己的Ubuntu已经安装了jdk并且配置好了环境变量 然后在官网下载相应的eclipse安装包: https://www.eclipse.org/downloads/packages/ 下载 ...

  10. 关于Sysinternals Suite

    sysinternals 的网站创立于1996年由Mark russinovich和布赖科格斯韦尔主办其先进的系统工具和技术资料·微软于2006年7月收购sysinternals公司 . 不管你是一个 ...