hdu GuGuFishtion 6390 数论 欧拉函数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6390
直接开始证明:
我们设
…………………………………….....…...............……………...(1)
则
…................................….…(2)
为什么是这样呢,因为我们知道


同理得到b的分解和的分解
我们会发现,虽然a和b的分解里可以有相等的部分,但是在里的也就是我们假设为的部分是不会有重复的,那么要由*得出也就是要去除重复部分,的重复部分就是a的和b的的重复部分;那么因为都是乘法,相同的部分就是最大公约数(因为每个都是素数也就是如果a和b的分解没有相同的数那么gcd(, )是不会大于1的);
由此我们开始继续对(2)的后续推论。

我先设
,那么
也就是
(看了很多博客,就给了个易得,虽然说确实很简单但是对于我这个菜鸡就不友好了)
这一部分的证明是看了这个大佬的博客的:http://www.cnblogs.com/H-Riven/p/9494391.html
(再提供给同样是数论萌新的人一篇文库【有需要的话】:https://wenku.baidu.com/view/542961fdba0d4a7302763ad5.html)
设
设
(即在
的情况下
的数量)
那么我们实际上就是要求:
,对于
我们可以预处理得到。但是
就没那么容易得到了;
现在题目就变成求对于
,在
、
的情况下有多少种方案;
这里我设
为
的数量 (C*x表示x的倍数);即可以和HDU1695一样得到
的结论
设
为
的数量
那么:

倒过来求的原因是因为
,也就是我们可以知道最后一位的准确值,那么反过来就可以推到每个位置准确值了;
那么答案就已经出来了;又因为要求的
,对于每个
,是含有有除法的,所以这里要用除法逆元,因为每次的mod都是不同的,所以说每次都要得到逆元,因为
一定会小于min(n,m);所以说每次打从1到 min(n,m)的表比单个值的计算快;
以下是代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e6+;
ll euler[N], inv[N]={, }, F[N], P[N], n, m, mod, mins;
void Euler(){///打欧拉表
register int i, j;
for(i=; i<N; ++i){ euler[i]=i; }
for(i=; i<N; ++i){
if(euler[i]==i){
for(j=i; j<N; j+=i)
euler[j]=euler[j]-euler[j]/i;
}
}
}
void Inv(){///打表求逆元
for(register int i=; i<=mins; ++i){
inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;
}
}
int main( ){
Euler();
int T;
register ll ans;
register int i, j;
scanf("%d", &T);
while(T--){
scanf("%I64d%I64d%I64d", &n, &m, &mod);
mins=min(n, m);
Inv();
for(i=; i<=mins; ++i){
F[i]=(n/i)*(m/i)%mod;
}
for(i=mins; i>=; --i){
P[i]=F[i];
for(j=; j*i<=mins; ++j){
P[i]-=P[i*j];
if(P[i]<){
P[i]+=mod;
}
}
}
ans=;
for(i=; i<=mins; ++i){
ans=(ans+(i*inv[euler[i]]%mod)*P[i]%mod)%mod;
}
printf("%I64d\n", ans);
}
}
拙劣的代码
hdu GuGuFishtion 6390 数论 欧拉函数的更多相关文章
- 数论-欧拉函数-LightOJ - 1370
我是知道φ(n)=n-1,n为质数 的,然后给的样例在纸上一算,嗯,好像是找往上最近的质数就行了,而且有些合数的欧拉函数值还会比比它小一点的质数的欧拉函数值要小,所以坚定了往上找最近的质数的决心—— ...
- 【poj 3090】Visible Lattice Points(数论--欧拉函数 找规律求前缀和)
题意:问从(0,0)到(x,y)(0≤x, y≤N)的线段没有与其他整数点相交的点数. 解法:只有 gcd(x,y)=1 时才满足条件,问 N 以前所有的合法点的和,就发现和上一题-- [poj 24 ...
- GuGuFishtion HDU - 6390 (欧拉函数,容斥)
GuGuFishtion \[ Time Limit: 1500 ms\quad Memory Limit: 65536 kB \] 题意 给出定义\(Gu(a, b) = \frac{\phi(ab ...
- HDU 1695 GCD (欧拉函数+容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- BZOJ-2190 仪仗队 数论+欧拉函数(线性筛)
今天zky学长讲数论,上午水,舒爽的不行..后来下午直接while(true){懵逼:}死循全程懵逼....(可怕)Thinking Bear. 2190: [SDOI2008]仪仗队 Time Li ...
- HDU 5430 Reflect(欧拉函数)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=5430 从镜面材质的圆上一点发出一道光线反射NNN次后首次回到起点. 问本质不同的发射的方案数. 输入描述 ...
- hdu 5279 Reflect phi 欧拉函数
Reflect Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/contest_chi ...
- HDU 1695 GCD(欧拉函数+容斥原理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:x位于区间[a, b],y位于区间[c, d],求满足GCD(x, y) = k的(x, ...
- Codeforces_776E: The Holmes Children (数论 欧拉函数)
题目链接 先看题目中给的函数f(n)和g(n) 对于f(n),若自然数对(x,y)满足 x+y=n,且gcd(x,y)=1,则这样的数对对数为f(n) 证明f(n)=phi(n) 设有命题 对任意自然 ...
随机推荐
- C++:多态浅析
1.多态 在C++中由两种多态性: • 编译时的多态性:通过函数的重载和运算符的重载来实现的 • 运行时的多态性:通过类继承关系和虚函数来实现的 特别注意: a.运行时的多态性是指程序执行前,无法根据 ...
- 软件项目第一次sprint评分表
- 第二阶段Sprint10
昨天:查看有关“共享平台”的资料,看如何实现上传下载功能,并尝试编码,没有成功 今天:集合三个人的代码,整合到一起,修复出现的Bug 遇到的问题:看Bug没有出现,但功能不是停止运行就是部分不能用,只 ...
- 第二个Sprint冲刺第 八天(燃尽图)
因为今天停电了,所以我们也休息一天!
- A+B Format 思路及解题过程结果
A+B Format 思路及解题过程结果 github链接 题目 解题思路 这个题目的难点在于每三位用逗号隔开,以及带不带负号的问题.第一个问题,我的解决办法是先通过取整来取数,再通过取余来去数.第二 ...
- tensorflow的一些基础用法
TensorFlow是一个采用数据流图,用于数值计算的开源软件库.自己接触tensorflow比较的早,可是并没有系统深入的学习过,现在TF在深度学习已经成了"标配",所以打算系统 ...
- sessionStorage & string typeof
sessionStorage & string typeof
- java之不修改变量的数据类型的处理方式
- 04.基于IDEA+Spring+Maven搭建测试项目--application-context.xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Ryuji doesn't want to study 2018 徐州赛区网络预赛
题意: 1.区间求 a[l]×L+a[l+1]×(L−1)+⋯+a[r−1]×2+a[r](L is the length of [ l, r ] that equals to r - l + 1) ...