题目链接:点击查看

题目大意:给出 a , b , c , d , x , y ,求

题目分析:因为涉及到了 gcd 的乘积运算,那么易知不同质因子的贡献是相互独立的,首先我们就可以先将 x 和 y 进行质因子分解,那么对于质因子 p 来说,设 cntx[ p ] 为 p 在 x 中出现的次数,cnty[ p ] 为 p 在 y 中出现的次数,不难看出,需要这两个数同时大于 0 才有贡献,如果其中一者为 0 的话,那么其表示的质因子就是 p^0 = 1 ,gcd 求出来显然也就是 1 了,对答案没有贡献

到此,cntx[ p ] 和 cnty[ p ] 都大于 0 ,那么质因子 p 的 gcd 就是 ,也就是 ,这也就提醒我们可以对指数单独处理,最后求一下 p 的幂次再乘起来就是答案了

此时我们可以对指数稍微打表找一下规律,打表程序如下(可以自己更改一下 i 和 j 的取值范围,分别代表 [ a , b ] 和 [ c , d ] ):

for(int k=1;k<=5;k++)//质因子p在x中的个数 for(int t=1;t<=5;t++)//质因子p在y中的个数 {printf("*****cntx:%d cnty:%d*****\n",k,t);for(int i=1;i<=5;i++)//a~b{for(int j=1;j<=5;j++)//c~d printf("%d ",min(i*k,j*t));puts("");}}

这里不卖关子了,直接说规律:

  1. 当 i 确定时,[ c , d ] 的一列可以分为两段:

    1. 前半段为等差数列
    2. 后半段为常数
  2. 当 j 确定时,[ a , b ] 的一行可以分为两段:
    1. 前半段为等差数列
    2. 后半段为常数

这样就可以将 ( b - a + 1 ) * ( d - c + 1 ) 的时间复杂度优化为 ( b - a + 1 ) 或者 ( d - c + 1 ) 了,因为知道了是等差数列,我们可以求出三项:第一项,第二项,最后一项,根据第一项和第二项得出公差,根据第一项、最后一项和公差计算出等差数列的长度,这样最后常数项的长度也能计算得出了

有个小坑就是,如果指数直接进行运算的话,会爆 long long ,可以用费马小定理降幂,一方面是保证指数在数据范围内,另一方面是加速快速幂的运算

因为我用了 map 参与质因子分解,所以总的时间复杂度为 ( b - a + 1 ) * logn * logn

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<unordered_map>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;const int mod=998244353;const int mmod=mod-1;map<int,int>mpx,mpy;LL q_pow(LL a,LL b)
{LL ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;
}void only(map<int,int>&mp,int x)
{for(int i=2;i*i<=x;i++){while(x%i==0){mp[i]++;x/=i;}}if(x!=1)mp[x]++;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int a,b,c,d,x,y;scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&x,&y);a=max(a,1);c=max(c,1);only(mpx,x),only(mpy,y);LL ans=1;for(auto it:mpx){int num=it.first,cntx=it.second,cnty=mpy[num];if(cntx==0||cnty==0)continue;LL res=0;//指数 for(int i=a;i<=b;i++){LL mmin=min(1LL*i*cntx,1LL*c*cnty),mmax=min(1LL*i*cntx,1LL*d*cnty);//第一项和最后一项LL delta=min(1LL*i*cntx,1LL*(c+1)*cnty)-mmin;//公差LL k=d-c+1;//一共有k项LL n;//有几项是等差数列if(delta==0)n=k;elsen=(mmax-mmin)/delta+1;LL sum=(n*mmin%mmod+(n*(n-1)/2)%mmod*delta%mmod)%mmod;//等差数列求和公式res=(res+sum%mmod+1LL*(k-n)*mmax%mmod)%mmod;}ans=ans*q_pow(num,res)%mod;}printf("%lld\n",ans);return 0;
}

牛客多校9 - Groundhog Chasing Death(质因子分解+思维)相关推荐

  1. Cutting Bamboos(牛客多校第九场H主席树+二分+思维)

    链接:https://ac.nowcoder.com/acm/contest/889/H 来源:牛客网 There are n bamboos arranged in a line. The i-th ...

  2. 牛客多校9 - Groundhog Looking Dowdy(尺取)

    题目链接:点击查看 题目大意:给出 n 天,每天可以有数件衣服可以选择,但每天只能选择一件衣服穿,每件衣服都有权值,现在需要挑出 m 天的衣服,使得最大值与最小值之差最小 题目分析:比赛时为了恰烂分用 ...

  3. 【2020年牛客暑假第九场】E题 Groundhog Chasing Death

    [2020年牛客暑假第九场]E题 Groundhog Chasing Death 质因子分解 题意 思路 方法一:先枚举iii再枚举公共质因子 Code(286ms) 方法二:先枚举公共质因子再枚举i ...

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

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

  5. 2020牛客暑期多校训练营(第九场) Groundhog Chasing Death

    Groundhog Chasing Death 题意:给出a.b.c.d.x.y,让求下列式子. 思路:对于gcd(x,y)我们知道 gcd(x,y)=p1 ^(min(n1,n2)) * p2 ^( ...

  6. 牛客多校三 B Black and white

    牛客多校三 B Black and white 在n*m的棋盘上,每个格子有一个数,初始可以选一定的格子标记为黑色,在任意四个形如(i1, j1)(i1, j2)(i2, j1)(i2, j2)的格子 ...

  7. 2019牛客多校第一场

    2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...

  8. LCS(2021牛客多校4)

    LCS(2021牛客多校4) 题意: 让你构造三个字符串s1,s2,s3,长度均为n,要求LCS(s1,s2)=a,LCS(s2,s3)=b,LCS(s1,s3)=c 题解: 先考虑三个串互相LCS为 ...

  9. 24dian(牛客多校第三场)

    24dian(牛客多校第三场) 题意: 给你n张牌,每张牌的大小为1 ~ 13,问这些牌与加减乘除任意组合(可以使用括号),且但所有的有效解在计算过程中都涉及到分数,即非整数,能否组成答案m,如果可以 ...

最新文章

  1. STM32F103五分钟入门系列(十三)独立看门狗IWDG
  2. weblogic搭建
  3. 大学计算机基础基础部分试题及答案,大学计算机基础试题及答案,等级考网络部分...
  4. 解决 pycharm can not save setting
  5. Codeforces 650 D. Zip-line
  6. java string char数组_String在Java中真的是不可变吗?
  7. 220万电商人竞相参与,阿里巴巴认证解决企业人才难题
  8. debian修改密码
  9. 春招你必须掌握的Python经典面试题(附赠简历模版)
  10. java实现账号登陆界面_java用户登录界面的代码
  11. 毕业论文选题方法和论文各部分写作技巧
  12. 领导带好团队需要有的3个能力
  13. iOS7新特性的兼容性处理方法
  14. 博士申请 | 西交利物浦大学黄开竹教授组招收机器学习全奖博士生
  15. 一键安装卸载oracle
  16. 如何保存为pps自动播放格式ppt模板背景
  17. SQL学习之决胜秋招
  18. COM:The Open Dialog Box
  19. 2020-06-08
  20. VS无法打开 NuGet包

热门文章

  1. mysql增删改查 工具类_Hibernate增删改查数据库之二工具类
  2. gephi java教程_Gephi的使用--以社交网络图为例
  3. SpringCloud环境搭建
  4. 索引 - 数据结构 - B+TREE
  5. 防重 Token 令牌如何实现幂等性?
  6. 方法区中的无用类回收
  7. HTTP协议通信原理
  8. 函数的参数-在函数内部针对参数赋值不会影响外部实参
  9. jQuery课程介绍、Query的介绍、Query初次体验、jQuery再次体验、jQuery中的顶级对象
  10. opengl 日地月运动模型_MaskFusion: 多运动目标实时识别、跟踪和重建