Groundhog Chasing Death

题意:给出a、b、c、d、x、y,让求下列式子。

思路:对于gcd(x,y)我们知道
gcd(x,y)=p1 ^(min(n1,n2)) * p2 ^(min(n1,n2))…pk ^(min(n1,n2))
p1、p2…pk是x和y的质因子,n1代表x中该质因子的个数,n2代表y中该质因子的个数

那么对于gcd(x,y)而言,因为这个式子是累乘的,所以gcd=1的就无需考虑。
所以我们去枚举x的质因子p,然后取看y中是不是也有该质因子p
如果y中没有,显然贡献也是1 乘起来没有影响。

假设x中质因子p的个数为n1,y中质因子p的个数为n2。
我们只需要算出来上面式子中,gcd里p的累加个数k即可,然后求p^k
这里我们考虑怎么快速求出来i从a到b,j从c到d时,gcd(p ^ ( n1 * i ),p ^ ( n2 *i ) )的累乘值。

因为这里都是p的幂次方,所以肯定是选择最小的那个了。
我们考虑遍历i,然后现在考虑怎么快速计算出当i固定时候,j从c到d的时候计算的p的个数和。
因为gcd是取最小的那个,所以对于当前i,我们计算n1 * i也就是此时(x ^ i)中有多少个p的个数
然后计算n2 * c 也就是(y ^ c)中有多少个p的个数
1、如果 n1 * i <= n2 * c ,也就是对于j取c的时候,p的个数就大于n1 * i个了,那么对于j从c到d,gcd的贡献肯定都是取最小的,也就是每次都取n1 * i,而j的遍历区间长度是d-c+1 所以此时的个数贡献就是 (d-c+1) * n1 * i
2、如果n1 * i >=n2 * d,也就是当j取最大时候j=d,前者的个数仍然比后者大,那么对于gcd而言,每次取得肯定都是j的那一部分,而这一部分就是
n2 * c + n2 * (c+1) + n2 * (c+2) …+n2 * d=n2 * (c+(c+1)+(c+2)+…+d)=n2 * (c+d) * (d-c+1)/2

3、如果不是上述两次情况呢,那么就是说存在一个k,c≤k≤d,使得j取[c,k]时候满足第二种情况,使得j取[k,d]满足第一种情况,只需要算出来k分两段计算就好了。

这里还需要用到欧拉降幂。a ^ b%mod=a ^ (b%f(mod)) %mod 其中f(mod)指的是mod的欧拉函数值。因为题中的mod是质数,所以f(mod)=mod-1.

复杂度看似是O(sqrt(x) * (b-a+1)),但是其中最多只会进行10 * ( b-a+1)次,因为从2开始最多只要11个质数相乘,就已经大于了1e9,也就是x的范围,也就是说去进行 固定i去计算的次数最多只会进行10次。真实复杂度应该是O(max(sqrt(x),(b-a+1) * cnt ))。其中cnt是x和y中都有的质因子的种类数

实测跑的还挺快的

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;
const ll mod2=mod-1;
ll a,b,c,d,x,y;
ll qpow(ll a,ll b){ll ans=1;a%=mod;while(b){if(b&1)  ans=ans*a%mod;b>>=1;a=a*a%mod;}return ans;
}
ll check(ll n1,ll n2){ll sum=0;for(ll i=a;i<=b;i++){ll cnt=n1*i;if(cnt<n2*c){sum+=cnt%mod2*(d-c+1)%mod2;}else if(cnt>n2*d){sum+=(d-c+1)*(c+d)/2%mod2*n2%mod2;}else{ll k=cnt/n2;sum+=(k-c+1)*(k+c)/2%mod2*n2%mod2;sum%=mod2;sum+=cnt%mod2*(d-k)%mod2;}sum%=mod2;}return sum%mod2;
}
int main(){cin>>a>>b>>c>>d>>x>>y;ll ans=1;for(ll i=2;i*i<=x;i++){if(x%i==0){int cx=0,cy=0;while(x%i==0) x/=i,cx++;while(y%i==0) y/=i,cy++;if(cy) ans*=qpow(i,check(cx,cy)),ans%=mod;}}if(x!=1){int cy=0;while(y%x==0) y/=x,cy++;if(cy) ans*=qpow(x,check(1,cy)),ans%=mod;}cout<<ans<<endl;return 0;
}

2020牛客暑期多校训练营(第九场) Groundhog Chasing Death相关推荐

  1. 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∏b​j=c∏d ...

  2. E Groundhog Chasing Death(2020牛客暑期多校训练营(第九场))(思维+费马小定理+质因子分解)

    E Groundhog Chasing Death(2020牛客暑期多校训练营(第九场))(思维+费马小定理+质因子分解) 链接:https://ac.nowcoder.com/acm/contest ...

  3. 2020牛客暑期多校训练营(第六场)

    2020牛客暑期多校训练营(第六场) 额,睡了一下午,直接错过了比赛... 文章目录 A African Sort 题意: 题解: 代码: B Binary Vector C Combination ...

  4. 2020牛客暑期多校训练营(第四场)

    2020牛客暑期多校训练营(第四场) 这场属实有点难受 文章目录 A Ancient Distance B Basic Gcd Problem 题目 代码: C Count New String D ...

  5. 2020牛客暑期多校训练营(第一场)

    文章目录 A B-Suffix Array B Infinite Tree C Domino D Quadratic Form E Counting Spanning Trees F Infinite ...

  6. 2020牛客暑期多校训练营(第二场)

    2020牛客暑期多校训练营(第二场) 最烦英语题 文章目录 A All with Pairs B Boundary C Cover the Tree D Duration E Exclusive OR ...

  7. 2020牛客暑期多校训练营(第七场)J.Pointer Analysis

    2020牛客暑期多校训练营(第七场)J.Pointer Analysis 题目链接 题目描述 Pointer analysis, which aims to figure out which obje ...

  8. 2020牛客暑期多校训练营(第三场)A.Clam and Fish

    2020牛客暑期多校训练营(第三场)A.Clam and Fish 题目链接 题目描述 There is a fishing game as following: The game contains ...

  9. 2020牛客暑期多校训练营(第五场)——E Bogo Sort

    2020牛客暑期多校训练营(第五场)--E Bogo Sort 题目描述 Today Tonnnny the monkey learned a new algorithm called Bogo So ...

  10. 2020牛客暑期多校训练营(第一场)A B-Suffix Array(后缀数组,思维)

    链接:https://ac.nowcoder.com/acm/contest/5666/A 来源:牛客网 题目描述 The BBB-function B(t1t2-tk)=b1b2-bkB(t_1 t ...

最新文章

  1. python多张图片合并拼接,python制作sprite图、雪碧图
  2. Qt 第三章 创建主窗口--实现File菜单
  3. 标志寄存器的详细解释
  4. 过滤器Filter(17/4/8)
  5. caffe的python接口学习(8):caffemodel中的参数及特征的抽取
  6. Java 内存 关系_JVM和Linux之间的详细内存关系
  7. Mybatis-generator自动生成
  8. 相机成像之Sensor 篇
  9. 商品订单库存一致性问题的思考
  10. 基于ResNet的猫十二分类
  11. 屋里的大象:粒子物理学有自己的死神
  12. 如何利用Vue实现页面的局部刷新
  13. excel输入公式不计算结果
  14. 超图软件的下载及授权配置
  15. 微信小程序 — 保存文件到本地
  16. 新版Vultr挂载自定义ISO安装Windows XP系统并开启远程桌面教程
  17. raid卷构建实操(raid0、raid1、raid5、raid6以及raid10),可跟做
  18. 老spring3.2版本 redistemplate 报错_卡普空“令人惊讶”的老系列新作,会是《恐龙危机》吗?...
  19. 联邦学习((Federated Learning,FL)
  20. 深入理解RocketMQ Rebalance机制

热门文章

  1. C++中字符三兄弟(WCHAR、CHAR、TCHAR)
  2. carsim+simulink联合仿真实现变道 包含路径规划算法+mpc轨迹跟踪算法 带规划轨迹可视化
  3. 教女友学会python+yolov3调用笔记本摄像头——实时进行识别
  4. GridLayout布局
  5. mysql小知识:去除指定字段里的第一个字符和最后一个字符
  6. 第109个母亲节快乐,程序猿特殊的表达
  7. C#转换Datetime为 UnixTimeStamp方法和坑点
  8. ImageView的scaleType的属性
  9. Attention机制中 Q、K、V分别从哪里来?
  10. jieba分词、词性标注、停用词