Groundhog Chasing Death
题目:
https://ac.nowcoder.com/acm/contest/5674/E
calculate ∏i=ab∏j=cdgcd(xi,yj)\prod\limits_{i=a}^{b}\prod\limits_{j=c}^{d}gcd(x^i,y^j)i=a∏bj=c∏dgcd(xi,yj)modulo 998244353998244353998244353
思路:
∏i=ab∏j=cdgcd(xi,yj)=∏i=ab∏j=cd∏k=1npkmin(ak⋅i,bk⋅j)pk为x和y共同的素因子,ak为x中pk的幂,同理bk=∏k=1n∏i=ab∏j=cdpkmin(ak⋅i,bk⋅j)\begin{aligned} &\prod\limits_{i=a}^{b}\prod\limits_{j=c}^{d}gcd(x^i,y^j)\\ =&\prod\limits_{i=a}^{b}\prod\limits_{j=c}^{d}\prod\limits_{k=1}^{n}p_k^{min(a_k\cdot i,b_k\cdot j)}\quad p_k为x和y共同的素因子,a_k为x中p_k的幂,同理b_k\\ =&\prod\limits_{k=1}^{n}\prod\limits_{i=a}^{b}\prod\limits_{j=c}^{d}p_k^{min(a_k\cdot i,b_k\cdot j)} \end{aligned} ==i=a∏bj=c∏dgcd(xi,yj)i=a∏bj=c∏dk=1∏npkmin(ak⋅i,bk⋅j)pk为x和y共同的素因子,ak为x中pk的幂,同理bkk=1∏ni=a∏bj=c∏dpkmin(ak⋅i,bk⋅j)
然后分类讨论:
枚举kkk,iii,当j≤⌊ak⋅ibk⌋j\le\lfloor\frac{a_k\cdot i}{b_k}\rfloorj≤⌊bkak⋅i⌋时,min(ak⋅i,bk⋅j)=bk⋅jmin(a_k\cdot i,b_k\cdot j)=b_k\cdot jmin(ak⋅i,bk⋅j)=bk⋅j,当j≥⌊ak⋅ibk⌋+1j\ge\lfloor\frac{a_k\cdot i}{b_k}\rfloor+1j≥⌊bkak⋅i⌋+1时,min(ak⋅i,bk⋅j)=ak⋅imin(a_k\cdot i,b_k\cdot j)=a_k\cdot imin(ak⋅i,bk⋅j)=ak⋅i。
当然还要对⌊ak⋅ibk⌋\lfloor\frac{a_k\cdot i}{b_k}\rfloor⌊bkak⋅i⌋进行分类讨论,取其中一种情况说明。
当c≤⌊ak⋅ibk⌋≤dc\le\lfloor\frac{a_k\cdot i}{b_k}\rfloor\le dc≤⌊bkak⋅i⌋≤d时
∏k=1n∏i=ab∏j=cdpkmin(ak⋅i,bk⋅j)=∏k=1n∏i=abpkbk⋅(c+⌊ak⋅ibk⌋)⋅(⌊ak⋅ibk⌋−c+1)2+ak⋅i⋅(d−⌊ak⋅ibk⌋+1)\begin{aligned} &\prod\limits_{k=1}^{n}\prod\limits_{i=a}^{b}\prod\limits_{j=c}^{d}p_k^{min(a_k\cdot i,b_k\cdot j)}\\ =&\prod\limits_{k=1}^{n}\prod\limits_{i=a}^{b}p_k^{b_k\cdot \frac{(c+\lfloor\frac{a_k\cdot i}{b_k}\rfloor)\cdot (\lfloor\frac{a_k\cdot i}{b_k}\rfloor-c+1)}{2}+a_k\cdot i\cdot (d-\lfloor\frac{a_k\cdot i}{b_k}\rfloor+1)} \end{aligned} =k=1∏ni=a∏bj=c∏dpkmin(ak⋅i,bk⋅j)k=1∏ni=a∏bpkbk⋅2(c+⌊bkak⋅i⌋)⋅(⌊bkak⋅i⌋−c+1)+ak⋅i⋅(d−⌊bkak⋅i⌋+1)
另外,可以预处理出∀i∈[1,100000],pki,pki∗100000\forall i\in[1,100000],p_k^i,p_k^{i*100000}∀i∈[1,100000],pki,pki∗100000的值。则欧拉降幂后pkx=pk100000⋅a+bp_k^x=p_k^{100000\cdot a+b}pkx=pk100000⋅a+b
a≤100000,b≤100000a\le100000,b\le100000a≤100000,b≤100000。这样可以省掉一个快速幂。
代码:
#include<bits/stdc++.h>
#pragma GCC optimize(2)
#define ll long long
#define mod 998244353
using namespace std;
struct node
{ll p,num;node(int x,int y):p(x),num(y) {}
};
struct node1
{ll p,num,num1;
}w2[200];
struct node2
{ll sum[100001],sum1[100001];
}w3[200];
ll a,b,c,d,x,y,ans=1;
set<ll>w,w1;
set<ll>::iterator it;
map<ll,ll>ma,ma1;
int si,k=0;
int cmp(node a,node b)
{return a.num<b.num;
}
int main()
{cin>>a>>b>>c>>d>>x>>y;ll tmp=x;for(ll i=2; i*i<=tmp; i++){if(x%i==0){ll num=0;while(x%i==0){num++;x/=i;}w.insert(i),ma[i]=num;}}if(x!=1)w.insert(x),ma[x]=1;tmp=y;for(ll i=2; i*i<=tmp; i++){if(y%i==0){ll num=0;while(y%i==0){num++;y/=i;}w1.insert(i),ma1[i]=num;}}if(y!=1)w1.insert(y),ma1[y]=1;for(it=w.begin(); it!=w.end(); it++)if(w1.find((*it))!=w1.end())w2[k].p=(*it),w2[k].num=ma[(*it)],w2[k++].num1=ma1[(*it)];for(int i=0;i<k;i++){w3[i].sum[0]=w3[i].sum1[0]=1;for(int j=1;j<=100000;j++)w3[i].sum[j]=w3[i].sum[j-1]*w2[i].p%mod;w3[i].sum1[1]=w3[i].sum[100000];for(int j=2;j<=100000;j++)w3[i].sum1[j]=w3[i].sum1[j-1]*w3[i].sum1[1]%mod;}for(ll i=a;i<=b;i++){for(int j=0;j<k;j++){ll locate=w2[j].num*i/w2[j].num1;if(locate<c)ans=ans*w3[j].sum[(w2[j].num*i*(d-c+1)%(mod-1))%100000]%mod*w3[j].sum1[(w2[j].num*i*(d-c+1)%(mod-1))/100000]%mod;else if(locate>=c&&locate<=d)ans=ans*w3[j].sum[(w2[j].num1*((c+locate)*(locate-c+1)/2)%(mod-1))%100000]%mod*w3[j].sum1[(w2[j].num1*((c+locate)*(locate-c+1)/2)%(mod-1))/100000]%mod*w3[j].sum[(w2[j].num*i*(d-locate)%(mod-1))%100000]%mod*w3[j].sum1[(w2[j].num*i*(d-locate)%(mod-1))/100000]%mod;elseans=ans*w3[j].sum[(w2[j].num1*((c+d)*(d-c+1)/2)%(mod-1))%100000]%mod*w3[j].sum1[(w2[j].num1*((c+d)*(d-c+1)/2)%(mod-1))/100000]%mod;}}cout<<ans;return 0;
}
Groundhog Chasing Death相关推荐
- 【2020年牛客暑假第九场】E题 Groundhog Chasing Death
[2020年牛客暑假第九场]E题 Groundhog Chasing Death 质因子分解 题意 思路 方法一:先枚举iii再枚举公共质因子 Code(286ms) 方法二:先枚举公共质因子再枚举i ...
- 2020牛客暑期多校训练营(第九场) Groundhog Chasing Death
Groundhog Chasing Death 题意:给出a.b.c.d.x.y,让求下列式子. 思路:对于gcd(x,y)我们知道 gcd(x,y)=p1 ^(min(n1,n2)) * p2 ^( ...
- E Groundhog Chasing Death(2020牛客暑期多校训练营(第九场))(思维+费马小定理+质因子分解)
E Groundhog Chasing Death(2020牛客暑期多校训练营(第九场))(思维+费马小定理+质因子分解) 链接:https://ac.nowcoder.com/acm/contest ...
- 牛客多校9 - Groundhog Chasing Death(质因子分解+思维)
题目链接:点击查看 题目大意:给出 a , b , c , d , x , y ,求 题目分析:因为涉及到了 gcd 的乘积运算,那么易知不同质因子的贡献是相互独立的,首先我们就可以先将 x 和 y ...
- 2020牛客暑期多校训练营(第九场)E题 Groundhog Chasing Death
题意 计算 ∏ i = a b ∏ j = c d g c d ( x i , y j ) \prod_{i=a}^{b}\prod_{j=c}^{d}gcd(x^i,y^j) i=a∏bj=c∏d ...
- Groundhog Chasing (数论质因数)
Groundhog Chasing (数论&质因数) 思路:枚举质因子贡献. 然后第一维暴力,第二维用公式求和. 第二维分三种情况: 设当前因子为 s s s, x x x的该因子个数为 c ...
- 2020牛客多校E- Groundhog Chasing Death
原题 题意 求 ∏ i = a b ∏ j = c d gcd ( x i , y j ) \prod_{i=a}^b\prod_{j=c}^d\gcd(x^i,y^j) i=a∏bj=c∏d ...
- MT to Death,专访 ACL Fellow刘群,一个NLPer的极致表白
导读:2022年1月6日,国际计算语言学学会ACL正式公布了2021年ACL Fellow名单,机器翻译专家.华为诺亚方舟实验室语音语义首席科学家刘群当选为全球八位新晋ACL Fellow之一. 我们 ...
- SOJ 8064 Whack the Groundhog
Description You are playing the game 'Whack the Groundhog' with your little nephew. Considering your ...
- 【清北学堂】 死亡(death)
M个位置可以打sif,N+1个人等着打sif,已知前N个人的时间,问第N+1个人什么时候才能打sif(不能插队,即必须按顺序来打sif) 输入N,M以及每个人所需要的时间:输出第N+1个人所需的时间 ...
最新文章
- 华岩资本--微生物领域项目投递通道
- acm之简单博弈 Nim Bash Wythoff
- Magento教程 10:如何修改网站文字?
- 【白皮书分享】2021智慧零售私域白皮书-腾讯.pdf(附下载链接)
- mysql 文章 字段设计_在mysql数据库中,文章表设计有啥好的思路
- 【Shell】按关键字查找某个字符
- 转:android TextView中超链接的事件捕捉(textview上LINK的点击事件)
- sleep方法和wait方法的区别?
- mysql增删改查sql语句_sql增删改查语句是什么?
- C++函数模板特化,类模板特化
- 计算机右键管理快捷键,鼠标右键菜单管理
- vb可以开发用c语言,c语言和vb语言的区别是什么?_后端开发
- uni-app中view和text组件和动画的使用
- 如何一步步设计前端架构?
- 更新驱动后重启黑屏且进不了bios时的一个解决办法
- 抖音、美团等大厂千万级用户的Android客户端架构演进之路—
- 2021-08-17
- 如何用sql语句对性别的 约束条件让它只能填 男 或 女
- IAR中map文件全解析
- RTSP拉流h265(hevc)+AAC关键节点详解!史上最全RTSP+hevc 交互全记录!
热门文章
- 全国2012年1月高等教育考试
- 高保真设计软件介绍及推荐
- Sping AOP 源码解析(一、动态 AOP 自定义标签 aop:aspectj-autoproxy)
- python计算方差膨胀因子_可决系数R^2和方差膨胀因子VIF
- Java中易混淆问题总结
- Win10红警如何关闭3d加速?
- 中兴力维动环监控接线图_肖东晖:动环是基本点 视频监控是增长点
- 三层交换机配置实现不同网络互通
- android手机电池寿命,真正有效延长手机电池寿命的几点建议(iPhone+安卓)
- BZOJ 1951 古代猪文 鲁卡斯定理+费马小定理+中国剩余定理