bzoj4173 数学
bzoj4173 数学
欧拉\(\varphi\)函数,变形还是很巧妙的
求:
\]
首先,对\(\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\),也就是:
\]
所以只看那个\(\sum\)就是:
\]
然后又由于\(\lfloor\dfrac{n+m}{k}\rfloor-\lfloor\dfrac{n}{k}\rfloor-\lfloor\dfrac{m}{k}\rfloor=1\)只有\(0,1\)两个值,是\(1\)符合要求是\(0\)不符合,所以可以把上式继续拆:
\]
\]
下面考虑如何求\(\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\)个数:
\]
然后用刚才说的结论,变形为:
\]
所以答案就清晰了:
\]
最后由于数很大一定要频繁取模
#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 数学的更多相关文章
- 【BZOJ4173】数学 欧拉函数神题
[BZOJ4173]数学 Description Input 输入文件的第一行输入两个正整数 . Output 如题 Sample Input 5 6 Sample Output 240 HINT N ...
- 【BZOJ-4173】数学 欧拉函数 + 关于余数的变换
4173: 数学 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 306 Solved: 163[Submit][Status][Discuss] D ...
- 「BZOJ4173」数学
题面 已知 \[\large{S(n,m)=\{k_{1},k_{2},\cdots k_{i}\}}\] 且每个 \(k\) 满足 \[\large{n \%k+m\%k\geq k}\] 求 \[ ...
- 【BZOJ4173】数学 题解(数论)
前言:体验到了推式子的快感orz 题目大意:求$\varphi(n)*\varphi(m)*\sum_{n\ mod\ k+m\ mod\ k\geq k} \varphi(k)\ mod\ 9982 ...
- 数学思想:为何我们把 x²读作x平方
要弄清楚这个问题,我们得先认识一个人.古希腊大数学家 欧多克索斯,其在整个古代仅次于阿基米德,是一位天文学家.医生.几何学家.立法家和地理学家. 为何我们把 x²读作x平方呢? 古希腊时代,越来越多的 ...
- 速算1/Sqrt(x)背后的数学原理
概述 平方根倒数速算法,是用于快速计算1/Sqrt(x)的值的一种算法,在这里x需取符合IEEE 754标准格式的32位正浮点数.让我们先来看这段代码: float Q_rsqrt( float nu ...
- MarkDown+LaTex 数学内容编辑样例收集
$\color{green}{MarkDown+LaTex 数学内容编辑样例收集}$ 1.大小标题的居中,大小,颜色 [例1] $\color{Blue}{一元二次方程根的分布}$ $\color{R ...
- 深度学习笔记——PCA原理与数学推倒详解
PCA目的:这里举个例子,如果假设我有m个点,{x(1),...,x(m)},那么我要将它们存在我的内存中,或者要对着m个点进行一次机器学习,但是这m个点的维度太大了,如果要进行机器学习的话参数太多, ...
- Sql Server函数全解<二>数学函数
阅读目录 1.绝对值函数ABS(x)和返回圆周率的函数PI() 2.平方根函数SQRT(x) 3.获取随机函数的函数RAND()和RAND(x) 4.四舍五入函数ROUND(x,y) 5.符号函数SI ...
随机推荐
- git log查看某文件的修改历史
1. git log filename 可以看到fileName相关的commit记录 2. git log -p filename可以显示每次提交的diff 3. 只看某次提交中的某个文件变化,可以 ...
- 29.2 Iterator 迭代器
/* * 集合的遍历方式: * 1.toArray(),可以把集合转换成数组,然后遍历数组即可 * 2.iterator(),可以返回一个迭代器对象,我们可以通过迭代器对象来迭代集合 * * Iter ...
- 算法:模拟退火(基于c++程序)
一 什么是模拟退火算法? 所谓退火,其实是金属冶炼的一个名词.比如加工一把刀,我们通常是把材料加工到很高的一个温度,加以锤炼.之后慢慢的将温度降下来,如果我们降温的控制比较好的话,那么金属里面的原子就 ...
- JMF 下载安装与测试 测试成功
本来就是想在自己写的java里面加入实习的摄像头监控,然后个各种百度了一下,就用JMF来弄了,不过这个东西貌似比较旧,网上的资料虽然说有,但是也不是太多,并且遇到的一下问题也不能解决,总之经过了一天的 ...
- 精彩的jquery弹幕效果
html页面如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...
- python的pip怎样更新包 + pip的help翻译
1.pip下载安装 pip下载 进入https://pypi.python.org/pypi/pip,下载 .tar.gz压缩包 Linux安装pip # tar -xzvf pip-1.5.4.ta ...
- [linux][mysql] MySQL中information_schema是什么
来源:MySQL中information_schema是什么 information_schema数据库是MySQL自带的,information_schema提供了访问数据库元数据的方式.这就是?元 ...
- TeamViewer11 万全免费
下载地址:百度网盘 c4xm TeamViewer 是一款简单易用且功能强大的远程控制软件,它能穿越内网,摆脱路由器或防火墙的限制,任何一方都不需要拥有固定IP地址.让不懂技术的朋友也能远程控制电脑, ...
- 解决centos ping不通外网
先确认三件事: 一.ip 二.网关 三.dns 一就不说了,设置好本地ip和掩码就行了,二网关 添加默认网关,命令:route add defaule gw 192.168.1.1 这是 你用ro ...
- MySQL如何创建一个好索引?创建索引的5条建议【宇哥带你玩转MySQL 索引篇(三)】
MySQL如何创建一个好索引?创建索引的5条建议 过滤效率高的放前面 对于一个多列索引,它的存储顺序是先按第一列进行比较,然后是第二列,第三列...这样.查询时,如果第一列能够排除的越多,那么后面列需 ...