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 ...
随机推荐
- python 入门 之 Json 序列化
开发网站,离不了Json 但是一般情况,不支持python的其它对象,怎么办? 有办法:Json 序列化!!! 总体来说,需要序列化的数据类型为 字典,类,嵌套类. 下面是我做的一个demo,都包含了 ...
- Git常用指令整理(Git Cheat Sheet)
[Toc] 1. 创建 复制一个已创建的仓库:git clone ssh://user@domain.com/repo.git 创建一个新的本地仓库:git init 2. 本地修改 显示工作路径下已 ...
- TP基础
一.目录结构 解压缩到web目录下面,可以看到初始的目录结构如下: www WEB部署目录(或者子目录)├─index.php 入口文件├─README.md README文件├─Applicatio ...
- 30.6 HashMap的使用
/* * * 使用HashMap存储数据并遍历(字符串作为key) * *使用HashMap存储数据并遍历(自定义对象作为key) */ 字符串做key和Map的使用一样,重点介绍自定义对象作为key ...
- bit/byte/ascii/unicode
bit(位).byte(字节).ASCII.Unicode 和 UTF-8位和字节的关系bit 电脑记忆体中最小的单位,在二进位电脑系统中,每一bit 可以代表0 或 1 的数位讯号byte一个byt ...
- Java Array数组使用详解
本文主要讲解java中array数组使用,包含堆.栈内存分配及区别 1.动态初始化 package myArray; /* * 堆:存储的是new出来的东西,实体,对象 * A 每个对象都有地址值 * ...
- "五号标题"组件:<h5> —— 快应用组件库H-UI
 <import name="h5" src="../Common/ui/h-ui/text/c_h5"></import> < ...
- Docker 清理命令 删除所有的镜像和容器
杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器 docker rm $(docker ps -a -q) 删除所有未打 dangling ...
- 数据结构和算法(Golang实现)(11)常见数据结构-前言
常见数据结构及算法 数据结构主要用来组织数据,也作为数据的容器,载体. 各种各样的算法,都需要使用一定的数据结构来组织数据. 常见的典型数据结构有: 链表 栈和队列 树 图 上述可以延伸出各种各样的术 ...
- 如何练习python?有这五个游戏,实操经验就已经够了
现在学习python的人越来越多了,但仅仅只是学习理论怎么够呢,如何练习python?已经是python初学者比较要学会的技巧了! 其实,最好的实操练习,就是玩游戏. 也许你不会信,但这五个小游戏足够 ...