hdu6390GuGuFishtion【数论】
GuGuFishtion
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1204 Accepted Submission(s): 459
Problem Description
Today XianYu is too busy with his homework, but the boring GuGu is still disturbing him!!!!!!
At the break time, an evil idea arises in XianYu's mind.
‘Come on, you xxxxxxx little guy.’
‘I will give you a function ϕ(x) which counts the positive integers up to x that are relatively prime to x.’
‘And now I give you a fishtion, which named GuGu Fishtion, in memory of a great guy named XianYu and a disturbing and pitiful guy GuGu who will be cooked without solving my problem in 5 hours.’
‘The given fishtion is defined as follow:
Gu(a,b)=ϕ(ab)ϕ(a)ϕ(b)
And now you, the xxxxxxx little guy, have to solve the problem below given m,n,p.’
(∑a=1m∑b=1nGu(a,b))(modp)
So SMART and KINDHEARTED you are, so could you please help GuGu to solve this problem?
‘GU GU!’ GuGu thanks.
Input
Input contains an integer T indicating the number of cases, followed by T lines. Each line contains three integers m,n,p as described above.
1≤T≤3
1≤m,n≤1,000,000
max(m,n)<p≤1,000,000,007
And given p is a prime.
Output
Please output exactly T lines and each line contains only one integer representing the answer.
Sample Input
1 5 7 23
Sample Output
2
Source
2018 Multi-University Training Contest 7
Recommend
chendu | We have carefully selected several similar problems for you: 6408 6407 6406 6405 6404
先去学习了一下欧拉函数
这道题根据欧拉函数的定义化简可以得到
因此对于题目要求的
我们需要先计算每一个i/φ(i)的值, 再计算gcd() = i的数对的数目
先预处理出所有的φi
对于一个数i,在a∈[1,n],b∈[1,m]a∈[1,n],b∈[1,m]的范围内,设f[i]为gcd为(i,2i,3i...)的对数设f[i]为gcd为(i,2i,3i...)的对数
显然 : f[i]=[n/i]∗[m/i]f[i]=[n/i]∗[m/i]
那么我们从大到小维护f[i]f[i],因为我们要的是 gcd=igcd=i 的对数,所以要把 gcd=2igcd=2i 的情况减去【预处理】
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stack>
#define inf 1e18
using namespace std;
int t, n, m;
const int maxn = 1000005;
long long f[maxn], a[maxn], p;
long long cnt[maxn];
long long is[maxn], phi[maxn], pri[maxn], nump;
/*
特性 :
1.若a为质数,phi[a]=a-1;
2.若a为质数,b mod a=0,phi[a*b]=phi[b]*a
3.若a,b互质,phi[a*b]=phi[a]*phi[b](当a为质数时,if b mod a!=0 ,phi[a*b]=phi[a]*phi[b])
*/
void make()
{
memset(phi, 0, sizeof(phi));
memset(f, 0, sizeof(f));
phi[1] = 1;
for(int i = 2; i <= maxn; i++){
if(!is[i]){//i是素数
pri[++nump] = i;
phi[i] = i - 1;
}
for(int j = 1; j <= nump && pri[j] * i < maxn; j++){//筛
is[pri[j] * i] = 1;
if(i % pri[j] == 0){
phi[pri[j] * i] = phi[i] * pri[j];
break;
}
else phi[pri[j] * i] = phi[i] *(pri[j] - 1);
}
}
cnt[1] = 1;
for(int i = 1; i < maxn; i++){
for(int j = 2 * i; j < maxn; j += i){
cnt[j] -= cnt[i];
}
}
}
void deal()
{
f[1] = 1;
for(int i = 2; i <= min(n, m); i++)
f[i] = f[p % i] * (p - p / i) % p;
for(int i = 1; i <= min(n, m); i++){
a[i] = (long long)i * f[phi[i]] % p;
}
}
long long get(int n, int m)
{
long long ans = 0;
for(int i = 1; i <= min(n, m); i++){
ans+= (long long ) cnt[i] * (n / i) * (m / i);
ans %= p;
}
return ans;
}
int main()
{
make();
cin>>t;
while(t--){
scanf("%d%d%lld", &m, &n, &p);
deal();
long long ans = 0;
for(int i = 1; i <= min(n, m); i++){
ans += (long long )a[i] * get(n / i, m / i);
ans %= p;
}
printf("%lld\n", ans);
}
return 0;
}
hdu6390GuGuFishtion【数论】的更多相关文章
- Codeforces Round #382 Div. 2【数论】
C. Tennis Championship(递推,斐波那契) 题意:n个人比赛,淘汰制,要求进行比赛双方的胜场数之差小于等于1.问冠军最多能打多少场比赛.题解:因为n太大,感觉是个构造.写写小数据, ...
- NOIP2014 uoj20解方程 数论(同余)
又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...
- 数论学习笔记之解线性方程 a*x + b*y = gcd(a,b)
~>>_<<~ 咳咳!!!今天写此笔记,以防他日老年痴呆后不会解方程了!!! Begin ! ~1~, 首先呢,就看到了一个 gcd(a,b),这是什么鬼玩意呢?什么鬼玩意并不 ...
- hdu 1299 Diophantus of Alexandria (数论)
Diophantus of Alexandria Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- 【BZOJ-4522】密钥破解 数论 + 模拟 ( Pollard_Rho分解 + Exgcd求逆元 + 快速幂 + 快速乘)
4522: [Cqoi2016]密钥破解 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 290 Solved: 148[Submit][Status ...
- bzoj2219: 数论之神
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- hdu5072 Coprime (2014鞍山区域赛C题)(数论)
http://acm.hdu.edu.cn/showproblem.php?pid=5072 题意:给出N个数,求有多少个三元组,满足三个数全部两两互质或全部两两不互质. 题解: http://dty ...
- ACM: POJ 1061 青蛙的约会 -数论专题-扩展欧几里德
POJ 1061 青蛙的约会 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & %llu Descr ...
- 数论初步(费马小定理) - Happy 2004
Description Consider a positive integer X,and let S be the sum of all positive integer divisors of 2 ...
随机推荐
- Go 语言机制之逃逸分析
https://blog.csdn.net/weixin_38975685/article/details/79788254 Go 语言机制之逃逸分析 https://blog.csdn.net/ ...
- 探究Visual Studio生成的.vs文件夹内部结构和作用
https://shiyousan.com/post/636441130259624698 在某个契机的引发下,对VS解决方案中自动生成的.vs文件夹产生了兴趣,以前总对这个文件夹不怎么上心,最近正好 ...
- docker in centos error
centos 7 Docker 启动了一个web服务 但是启动时 报 WARNING: IPv4 forwarding is disabled. Networking will not work. 网 ...
- java.util.concurrent.RejectedExecutionException 线程池饱和
java.util.concurrent.RejectedExecutionException at java.util.concurrent.ThreadPoolExecutor$AbortPoli ...
- SQL SERVER数据库新认识的一些基础知识
最近要接触sql server的存储过程啦,在处理更加复杂的逻辑过程前,就来看一下这些sql的基础语法,感觉看啦一些复杂一点的sql语句,突然发现我是有多么的薄弱啊,所以在一些基础的语法上面我再重新整 ...
- API权限控制与安全管理
摘自网上 一.API权限控制范围 1.首先验证web端请求参数: (1)web请求参数:渠道.ServiceName.版本.Airline.时间戳(yyyyMMddhhmmssSSS).reqXML ...
- <转>Python: __init__.py 用法
转自 http://www.cnblogs.com/BeginMan/p/3183629.html python的每个模块的包中,都有一个__init__.py文件,有了这个文件,我们才能导入这个目录 ...
- <转>查看linux占用内存/CPU最多的进程
转自 http://beginman.cn/page26/ 查使用内存最多的10个进程 ps -aux | sort -k4nr | head -n 10 或者top (然后按下M,注意大写) 查使用 ...
- 【SpringCloud微服务实战学习系列】配置详解
前言 Spring Boot针对常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板化配置内容. 一.配置文件 Spring Boot的默认配置文件位置为src/main.reso ...
- sass - 公用方法封装
// 设置宽高 @mixin wh($wid,$hei){ @if $wid { width: $wid; } @if $hei { height: $hei; } overflow: hidden; ...