hdu 多校数论 GuGuFishtion
容斥+gcd+欧拉函数
求出1-n 和 1-m所有gcd(i,j)==x对数
x的范围1-min(n,m)
分解x的质因子 (1-1/p)...
q[x]=(1-1/p1)*(1-1/p2)/...
p是x的质因子
ans=sigma(q[x]*gcd(i,j)==x的对数) 1<=x<=min(n,m)
#include<stdio.h> #include<string.h> #include<math.h> #include<vector> #include<algorithm> using namespace std; typedef long long ll; const int maxn=1e6+5; int phi[maxn],vis[maxn],pre[maxn],top; ll num[maxn],q[maxn]; ll f[maxn],g[maxn]; ll qpow(ll a,ll b,ll c) {ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c;b>>=1;}return ans; } void init() {int i,j;for(i=1; i<maxn; i++)phi[i]=i;for(i=2; i<maxn; i+=2)phi[i]/=2;for(i=3; i<maxn; i+=2)if(phi[i]==i){for(j=i; j<maxn; j+=i)phi[j]=phi[j]/i*(i-1);}top=0;memset(vis,0,sizeof(vis));for(i=2; i<maxn; i++){if(!vis[i]){pre[top++]=i;}for(j=0; pre[j]*i<maxn; j++){vis[pre[j]*i]=1;if(i%pre[j]==0)break;}} } void init1(ll p) {int i,j,k;for(i=0; i<top; i++){k=pre[i];q[k]=qpow(pre[i]-1,p-2,p);q[k]=1ll*q[k]*(pre[i])%p;}for(i=1; i<maxn; i++)num[i]=1;for(i=0;i<top;i++){for(j=pre[i];j<maxn;j+=pre[i])num[j]=1ll*num[j]*q[pre[i]]%p;} } int main() {int i,j,k,t,n,m,z;ll ans,p;scanf("%d",&t);init();while(t--){scanf("%d%d%I64d",&m,&n,&p);init1(p);memset(f,0,sizeof(f));memset(g,0,sizeof(g));z=min(n,m);for(i=1; i<=z; i++)f[i]=1ll*(n/i)*(m/i)%p;ll sum;for(i=z; i>=1; i--){sum=0;for(j=i+i; j<=z; j+=i){sum+=g[j];sum=sum%p;}g[i]=(f[i]-sum+p)%p;}ans=0;for(i=1; i<=z; i++){ans+=1ll*g[i]*num[i]%p;ans=ans%p;}printf("%I64d\n",ans%p);}return 0; }
转载于:https://www.cnblogs.com/liweiggg/p/9475286.html
hdu 多校数论 GuGuFishtion相关推荐
- 权值线段树小结(hdu多校,普通平衡树,郁闷的出纳员)
之前刷了一点主席树的题目,但是没有系统的做过权值线段树的题目.主席树是多根权值线段树的综合.权值线段树可以解决在总区间里求第k大的问题.在普通的线段树里,我们每一个节点维护的是权值大小.但是在权值线段 ...
- HDU 多校 6400 Parentheses Matrix(构造)
HDU 多校 6400 Parentheses Matrix(构造) // Problem: D. Parentheses Matrix // Contest: Codeforces - 2018 C ...
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- HDU多校4 - 6989 Didn‘t I Say to Make My Abilities Average in the Next Life?!(单调栈)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问给出一个区间 [l,r][l,r][l,r],要求输出区间 [l,r][l,r][l,r] 内 " ...
- HDU多校4 - 6992 Lawn of the Dead(线段树+模拟)
题目链接:点击查看 题目大意:给出一个 n∗mn*mn∗m 的矩阵,有 kkk 个点被 banbanban 掉了,现在从点 (1,1)(1,1)(1,1) 出发,只能向右或向下移动,问可以到达的点有多 ...
- HDU多校1 - 6959 zoto(莫队+树状数组/值域分块)
题目链接:点击查看 题目大意:在二维平面内有 nnn 个点,表示为 (i,f[i])(i,f[i])(i,f[i]),需要回答 mmm 次询问,每次询问会给出一个矩形,问矩形内有多少个不同的 yyy ...
- HDU多校3 - 6975 Forgiving Matching(多项式匹配字符串)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串 sss 和一个长度为 mmm 的字符串 ttt.规定 kkk 匹配的意思是,两个长度相同的字符串至多有 kkk 个位置是不同的,特别的, ...
- HDU多校1 - 6955 Xor sum(字典树+贪心)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,要求找到一段长度最短的区间,使得异或和大于等于 kkk,如果有多种答案,输出左端点最小的那个 题目分析:倒着维护一下后缀异或和,将后缀异或 ...
- hdu 4279Number(数论)
传送门 参考资料: [1]:https://www.2cto.com/kf/201308/233613.html 题意,题解在上述参考资料中已经介绍的非常详细了,接下来的内容只是记录一下我的理解: 我 ...
最新文章
- 一分钟详解VS中快速生成dll和lib方法
- 团队-象棋游戏-模块开发过程
- EasyHook远程代码注入
- 来来来,送开发板了。
- java写入carbondata_Carbondata使用过程中遇到的几个问题及解决办法
- linux系统nginx启动不了,nginx启动不了,求大神帮助!
- NOIP2017普及组-1. 成绩
- python两数相加取_两数相加(Python3)
- 移动端textarea无法滚动
- php 如何开发oa系统,如何开发oa系统
- 软件项目的规模、工作量和成本是如何进行估算或评估的?
- css 文字颜色渐变上到下,CSS 实现背景色渐变和文字颜色渐变
- 怎么打开计算机开机启动菜单,计算机怎么添加多系统启动菜单?电脑添加双系统启动菜单的方法...
- ArcToolbox工具名英汉对应
- MiniCMS - 吐槽
- 车路协同边缘计算与边云协同概览
- 2021-05-08
- 【C++要笑着学】关键字 | 命名空间 | 输入和输出
- 人人车否认破产称地方经营型模式升级为合伙人模式
- 用Python端对端数据分析识别机器人“僵尸粉”
热门文章
- linux pwm 调屏_基于嵌入式Linux的LCD背光调节及驱动的实现
- Android之给图片添加涂鸦(文字)
- KafkaProducer初始化时,是否会拉取集群元数据?
- iOS架构-制作属于自己的cocoapods以及podspec文件讲解(20)
- ajax+php+jq+面向对象,php+jquery+ajax+json的一个最简单实例
- mysql去除字符串首的非字母_如何从SQLServer中的字符串中删除所有非字母字符?...
- 麦子学院彭亮python基础_麦子学院python
- mysql导入导出数据库
- exist not exist 分析
- Linux中source命令的用法