码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!) D. Count GCD


    题目链接:Problem - D - Codeforces

    题目大意:

    t (1≤t≤100)组测试,每组给定n 和 m (1≤n≤2⋅10^5, 1≤m≤10^9),n表示数组的长度,下一行为a数组a1,a2,…,an (1≤ai≤m)。

    要求构造长度为n的b数组,满足:

    • 1≤bi≤m
    • gcd(b1,b2,b3,...,bi)=ai

    在给定a的情况下,每组输出满足条件b数组的个数,答案对998244353取模。

    样例输入:

    1. 5
    2. 3 5
    3. 4 2 1
    4. 2 1
    5. 1 1
    6. 5 50
    7. 2 3 5 2 3
    8. 4 1000000000
    9. 60 30 1 1
    10. 2 1000000000
    11. 1000000000 2

    输出:

    1. 3
    2. 1
    3. 0
    4. 595458194
    5. 200000000

    hint: 

    测试1:

    b数组为:[4,2,1];[4,2,3];[4,2,5].

    思路:

    首先,一定有b1=a1;对于i>1,有: 

    a_{i}=(b_{1},b_{2},...,b_{i-1},b_{i})=((b_{1},b_{2},...,b_{i-1}),b_{i})=(a_{i-1},b_{i})

     (a_{i-1},b_{i})=a_{i}\rightarrow (\frac{a_{i-1}}{a_{i}},\frac{b_{i}}{a_{i}})=1\rightarrow (\frac{a_{i-1}}{a_{i}},k)=1(k\in \left [ 1, \frac{m}{a_{i}}\right])

     于是问题转化为对于每一个bi,在\left [ 1, \frac{m}{a_{i}}\right]之间有多少个数与\frac{a_{i-1}}{a_{i}}互素。

    可以考虑计算不互素的个数,再用总数减去即可。

    令s=\frac{a_{i-1}}{a_{i}},t= \frac{m}{a_{i}},将s分解出的质数存入p数组中,根据容斥原理,总数为:

    \sum_{i}^{n}p_{i}-\sum_{i,j}^{n}p_{i}p_{j}+...+(-1)^{k-1}\sum_{i1,i2...ik}^{n}p_{i1}p_{i2}p_{ik}

     可以用集合枚举的方式计算。

     时间复杂度:

    最坏情况下,枚举每个bi,s分解出的素数个数最多为9个(前十个乘积已经超过1e9),集合枚举复杂度为9*2^9,所有测试组n的和最多为2e5,总复杂度为:

    O(9*2^{9}*\sum n)=O(921600000)

    这样算会超时,但实际上分解出素数为9个的情况很少,而且算法瓶颈就是分解出素数的个数,枚举时也可以加一些判断优化,实测能AC。

    代码:

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #include
    11. #include
    12. #include
    13. #include
    14. #include
    15. #define pii pair
    16. #define pll pair
    17. #define pil pair
    18. #define pli pair
    19. #define pdd pair
    20. #define se second
    21. #define fi first
    22. #define endl '\n'
    23. #define rep(i,a,b) for (register int i=a;i
    24. #define per(i,a,b) for (register int i=a;i>b;--i)
    25. #define MEM(a,x) memset(a,x,sizeof(a))
    26. #define M(x) ((x)%MOD)
    27. #define db double
    28. #define eps 1e-9
    29. typedef long long LL;
    30. typedef unsigned long long ULL;
    31. using namespace std;
    32. const LL MOD=998244353;
    33. const int N=2e5+10;
    34. int a[N],p[40],cnt;
    35. void solve()
    36. {
    37. int n,m;
    38. cin>>n>>m;
    39. rep(i,0,n) cin>>a[i];
    40. int ans=1;
    41. rep(i,1,n){
    42. int s=a[i-1]/a[i],t=m/a[i];
    43. if(s==0||a[i-1]%a[i]){
    44. cout<<0<
    45. return;
    46. }
    47. if(s==1){
    48. ans=1ll*ans*t%MOD;
    49. continue;
    50. }
    51. int cnt=0,res=0;
    52. rep(j,2,s/j+1){
    53. if(s%j==0) p[cnt++]=j;
    54. while(s%j==0) s/=j;
    55. }
    56. if(s>1) p[cnt++]=s;
    57. rep(i,1,1<
    58. int c=0;
    59. LL su=1;
    60. rep(j,0,cnt) if((i>>j)&1){
    61. ++c,su*=p[j];
    62. if(su>t) break;
    63. }
    64. if(c&1) res+=t/su;
    65. else res-=t/su;
    66. }
    67. ans=1ll*ans*(t-res)%MOD;
    68. }
    69. cout<
    70. }
    71. int main()
    72. {
    73. // #ifndef ONLINE_JUDGE
    74. // freopen("title.in","r",stdin);
    75. // freopen("title.out","w",stdout);
    76. // #endif
    77. ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    78. int _=1;
    79. cin>>_;
    80. while(_--){
    81. solve();
    82. }
    83. // rep(i,1,_+1){
    84. // cout<<"Case "<
    85. // solve();
    86. // }
    87. return 0;
    88. }

  • 相关阅读:
    全局异常处理器
    FFmpeg--packet数据包和frame数据帧的区别
    Java中常用的一些业务校验
    DevExpress WPF Pivot Grid组件,可轻松实现多维数据分析!(二)
    红蓝攻防演练怎样构建实战化网络安全防御体系
    java计算机毕业设计阅读与存储图书网站设计与实现源码+系统+mysql数据库+lw文档+部署
    计算机网络
    力扣二叉树调试工具类——根据力扣数组输入形式的二叉树构造真正的二叉树
    【笔记篇】10仓管系统出库管理——之《实战供应链》
    7-sqlalchemy快速使用和原生操作、对象映射类型和增删查改、增加和基于对象的跨表查询、scoped线程安全、g对象、基本增查改和高级查询
  • 原文地址:https://blog.csdn.net/qq_60256199/article/details/127761002
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号