【BZOJ-4173】数学 欧拉函数 + 关于余数的变换
4173: 数学
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 306 Solved: 163
[Submit][Status][Discuss]
Description
Input
输入文件的第一行输入两个正整数 。
Output
如题
Sample Input
Sample Output
HINT
N,M<=10^15
Source
Solution
数论好题,开始无从下手,推导后感觉新姿势++
题目大意:求$\varphi(n)*\varphi(m)*\sum_{k\in S(n,m)}\varphi(k) mod p$其中$p=998244353$且$S(n,m)=\left \{n mod k+m mod k>=k\right \}$
首先把式子拆解一下,先看$S(n,m)=\left \{n mod k+m mod k>=k\right \}$:
不妨设$n=q_{1}*k+r_{1}$,$m=q_{2}*k+r_{2}$
那么很显然有:$n mod k=r_{1}$,$n / k=q_{1}$,$m mod k=r_{2}$,$m / k=q_{2}$
那么$S(n,m)=\left \{n mod k+m mod k>=k\right \}$就可以先化成$S(n,m)=\left \{r_{1}+r_{2}>=k\right \}$
那么根据上述,同样的有:$n+m=(q_{1}+q_{2})*k+(r_{1}+r_{2})$
很显然$(r_{1}+r_{2})/k<=1$,如果有$r_{1}+r_{2}>=k$,那么$(n+m) mod k=r_{1}+r_{2}-k$,且$(n+m)/k=q_{1}+q_{2}+1$
这样发现,开始的$S(n,m)=\left \{n mod k+m mod k>=k\right \}$就可以等价为$\frac{n+m}{k}-\frac{n}{k}-\frac{m}{k}=1$
所以$\sum_{k\in S(n,m)}\varphi(k)$就可以等价成$\frac{n+m}{k}\sum_{k=1}^{n+m}\varphi(k)-\frac{n}{k}\sum_{k=1}^{n}\varphi(k)-\frac{m}{k}\sum_{k=1}^{m}\varphi(k)$
根据有一个性质$n=\sum_{d|n}\varphi(d)$那么上述式子可以转化成:$\sum_{i=1}^{n+m}-\sum_{i=1}^{n}-\sum_{i=1}^{m}$
根据求和公式$\frac{n(n-1)}{2}$再变换为$\frac{(n+m)(n+m-1)}{2}-\frac{n(n-1)}{2}-\frac{m(m-1)}{2}$
化简一下发现$\frac{(n+m)(n+m-1)}{2}-\frac{n(n-1)}{2}-\frac{m(m-1)}{2}=n*m$
所以最后的答案为$ans=\varphi(n)*\varphi(m)*n*m$
那么用$\sqrt{n}$的时间复杂度求出$\varphi$即可
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
long long read()
{
long long x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
#define p 998244353
long long n,m;
long long phi(long long x)
{
long long y=(long long)sqrt(n+0.5);
long long re=x;
for(long long i=; i<=y; i++)
if(!(x%i))
{
re=re/i*(i-);
while(!(x%i)) x/=i;
}
if(x>) re=re/x*(x-);
return re;
}
int main()
{
n=read(),m=read();
long long ans;
ans=((((phi(n)%p)*(phi(m)%p))%p*(m%p))%p*(n%p))%p;
printf("%lld\n",ans);
return ;
}
很早以前写的..博客搬家没搬进来...
【BZOJ-4173】数学 欧拉函数 + 关于余数的变换的更多相关文章
- bzoj 2705 数学 欧拉函数
首先因为N很大,我们几乎不能筛任何东西 那么考虑设s(p)为 gcd(i,n)=p 的个数,显然p|n的时候才有意义 因为i与n的gcd肯定是n的因数,所以那么可得ans=Σ(p*s(p)) 那么对于 ...
- 【BZOJ4173】数学 欧拉函数神题
[BZOJ4173]数学 Description Input 输入文件的第一行输入两个正整数 . Output 如题 Sample Input 5 6 Sample Output 240 HINT N ...
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
- NOIP模拟:切蛋糕(数学欧拉函数)
题目描述 BG 有一块细长的蛋糕,长度为 n. 有一些人要来 BG 家里吃蛋糕, BG 把蛋糕切成了若干块(整数长度),然后分给这些人. 为了公平,每个人得到的蛋糕长度和必须相等,且必须是连续的一段 ...
- BZOJ 2818 Gcd(欧拉函数+质数筛选)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 9108 Solved: 4066 [Submit][Status][Discu ...
- [bzoj]2705: [SDOI2012]Longge的问题[数论][数学][欧拉函数][gcd]
[bzoj]P2705 OR [luogu]P2303 Longge的问题 Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需 ...
- 数学(欧拉函数):UVAOJ 11426 GCD - Extreme (II)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAIAAABnsVYUAAAgAElEQVR4nOzdPW7zvII/bG1gCi9gKq ...
- bzoj 2226 LCMSum 欧拉函数
2226: [Spoj 5971] LCMSum Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1123 Solved: 492[Submit][S ...
- Luogu P2158 [SDOI2008]仪仗队【数学/欧拉函数】by cellur925
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...
随机推荐
- cocoapod
更新代码: sudo gem install -n /usr/local/bin cocoapods --pre ex: The dependency `` is not used in any co ...
- subtable
- MYSQL临时表创建索引
DROP TEMPORARY TABLE IF EXISTS tmp_record_t2;CREATE TEMPORARY TABLE tmp_record_t2(consumption_id INT ...
- 如何让jboss eap 6.2+ 的多个war应用共享 jar 包?
weblogic有一个很贴心的功能,允许把多个war应用共同依赖的jar包,打包一个单独的war,以libary方式部署,然后各应用在weblogic.xml里声明引用该libary即可,这样可大大减 ...
- Theano2.1.10-基础知识之循环
来自:http://deeplearning.net/software/theano/tutorial/loop.html loop 一.Scan 一个递归的通常的形式,可以用来作为循环语句. 约间和 ...
- HoloLens开发手记 - Unity之Tracking loss
当HoloLens设备不能识别到自己在世界中的位置时,应用就会发生tracking loss.默认情况下,Unity会暂停Update更新循环并显示一张闪屏图片给用户.当设备重新能追踪到位置时,闪屏图 ...
- Node基础:url查询参数解析之querystring
模块概述 在nodejs中,提供了querystring这个模块,用来做url查询参数的解析,使用非常简单. 模块总共有四个方法,绝大部分时,我们只会用到 .parse(). .stringify() ...
- 开源免费的HTML5游戏引擎——青瓷引擎(QICI Engine) 1.0正式版发布了!
青瓷引擎的成长 青瓷引擎自2015年4月项目启动开始,7月首次亮相2015年ChinaJoy,便得到业界的极大关注,随后开启限量测试,收到数百个开发者团队的试用申请及反馈,期间经历了18个内测版本,完 ...
- Linux之我见
Linux哲学之美 linux就像是一个哲学的最佳实践.如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪的说着:“linux的美丽简直让人沉醉.” 我只能说是我处在linux学习的修炼之路上的一个 ...
- MongoDB数据库GroupBy查询使用Spring-data-mongondb的实现
以前用MongoDB数据库都是简单的查询,直接用Query就可以,最近项目中用到了分组查询,完全不一样.第一次遇到,搞了好几天终于有点那意思了. 先上代码: import java.math.BigD ...