https://nanti.jisuanke.com/t/31448

解析 易得an=n*n+n O(1)得到前n项和  再删除与m不互素的数  我们用欧拉函数求出m的质因数  枚举其集合的子集 进行容斥

n*n+n+2n*2n+2n+3n*3n+3n=(1+4+9)*n*n+(1+2+3)*n 所以也可以O(1)得到。

AC代码

  1. #include <bits/stdc++.h>
  2. #define pb push_back
  3. #define mp make_pair
  4. #define fi first
  5. #define se second
  6. #define all(a) (a).begin(), (a).end()
  7. #define fillchar(a, x) memset(a, x, sizeof(a))
  8. #define huan printf("\n");
  9. #define debug(a,b) cout<<a<<" "<<b<<" ";
  10. using namespace std;
  11. const int maxn=1e5+,inf=0x3f3f3f3f;
  12. typedef long long ll;
  13. typedef pair<int,int> pii;
  14. const ll mod=1e9+;
  15. int yin[maxn],cnt;
  16. void euler(ll n) //返回euler(n)
  17. {
  18. ll res=n,a=n;
  19. cnt=;
  20. for(ll i=; i*i<=a; i++)
  21. {
  22. if(a%i==)
  23. {
  24. yin[cnt++]=i;
  25. res=res/i*(i-);//先进行除法是为了防止中间数据的溢出 爆int
  26. while(a%i==)
  27. a/=i;
  28. }
  29. }
  30. if(a>)
  31. res=res/a*(a-),yin[cnt++]=a;
  32. }
  33. ll powmod(ll n,ll m)
  34. {
  35. ll ans=;
  36. while(m>)
  37. {
  38. if(m&)
  39. ans=ans*n%mod;
  40. m = m>>;
  41. n = n*n%mod;
  42. }
  43. return ans;
  44. }
  45. ll inv2=powmod(,mod-);
  46. ll inv6=powmod(,mod-);
  47. ll getsum1(ll n)
  48. {
  49. return n*(n+)%mod*(*n%mod+)%mod*inv6%mod;
  50. }
  51. ll getsum2(ll n)
  52. {
  53. return n*(n+)%mod*inv2%mod;
  54. }
  55. int main()
  56. {
  57. ll n,m;
  58. while(scanf("%lld%lld",&n,&m)!=EOF)
  59. {
  60. euler(m);
  61. ll ans=(getsum1(n)+getsum2(n))%mod;
  62. for(int i=; i<(<<cnt); i++)
  63. {
  64. ll temp=,jishu=;
  65. for(int j=; j<cnt; j++)
  66. {
  67. if(i&(<<j))
  68. temp*=yin[j],jishu++;
  69. }
  70. if(temp==)continue;
  71. ll bei=n/temp;
  72. ans=(ans+powmod(-,jishu)*temp*temp%mod*getsum1(bei)%mod+mod)%mod;
  73. ans=(ans+powmod(-,jishu)*temp*getsum2(bei)%mod+mod)%mod;
  74. }
  75. printf("%lld\n",ans);
  76. }
  77. }

ACM-ICPC 2018 沈阳赛区网络预赛 G 容斥原理的更多相关文章

  1. ACM-ICPC 2018 沈阳赛区网络预赛 G Spare Tire (素因子分解+容斥)

    . 样例输入复制 4 4 样例输出复制 14 #include<bits/stdc++.h> using namespace std; typedef long long ll; cons ...

  2. ACM-ICPC 2018 沈阳赛区网络预赛 G Spare Tire(容斥)

    https://nanti.jisuanke.com/t/31448 题意 已知a序列,给你一个n和m求小于n与m互质的数作为a序列的下标的和 分析 打表发现ai=i*(i+1). 易得前n项和为 S ...

  3. ACM-ICPC 2018 沈阳赛区网络预赛 G. Spare Tire

    这题很好啊,好在我没做出来...大概分析了一下,题目大概意思就是求 问所有满足1<=i<=n且i与m互素的ai之和 最开始我们队的做法是类似线性筛的方法去筛所有数,把数筛出来后剩下数即可, ...

  4. ACM-ICPC 2018 沈阳赛区网络预赛 G. Spare Tire (容斥原理)

    可推出$a_n = n^2+n, $ 设\(S_n = \sum_{i=1}^{n} a_i\) 则 \(S_n = \frac{n(n+1)(2n+1)}{6} + \frac{n(n+1)}{2} ...

  5. 【ACM-ICPC 2018 沈阳赛区网络预赛 G】Spare Tire

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 让你求出1..n中和m互质的位置i. 让你输出∑ai 这个ai可以oeis一波. 发现是ai = i(i+1) 1..n中和m互质的 ...

  6. ACM-ICPC 2018 沈阳赛区网络预赛 J树分块

    J. Ka Chang Given a rooted tree ( the root is node 11 ) of NN nodes. Initially, each node has zero p ...

  7. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心)

    ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心) Trace 问答问题反馈 只看题面 35.78% 1000ms 262144K There's a beach in t ...

  8. ACM-ICPC 2018 沈阳赛区网络预赛 K Supreme Number(规律)

    https://nanti.jisuanke.com/t/31452 题意 给出一个n (2 ≤ N ≤ 10100 ),找到最接近且小于n的一个数,这个数需要满足每位上的数字构成的集合的每个非空子集 ...

  9. ACM-ICPC 2018 沈阳赛区网络预赛-K:Supreme Number

    Supreme Number A prime number (or a prime) is a natural number greater than 11 that cannot be formed ...

随机推荐

  1. (转)Spring简介

    http://blog.csdn.net/yerenyuan_pku/article/details/52830571 阿昀以一个初学者的身份学习Spring框架,并按照一个小白的思路详细总结学习过程 ...

  2. example - 在这里插入一句话的简介

    总览 (SYNOPSIS) example [options] arguments 描述 (DESCRIPTION) 在这里插入描述 man9 应当是 “内核文档” 但是由于内核文档一般不以 man ...

  3. less算宽度 加~ width: calc(~"50% - 35px");

    less算宽度 加~  width: calc(~"50% - 35px");

  4. 关于MessageBox返回值

    风格设置MB_OK. 此时无论点击确定还是点击X,都返回IDOK.风格设置MB_OKCANCEL,点击确认返回IDOK,点击取消和X都返回IDCANCEL.风格设置MB_YESNO,点击是返回IDYE ...

  5. git 设置ss代理

    git config --global https.proxy http://127.0.0.1:1080       git config --global https.proxy https:// ...

  6. MySQL索引之博客荐读

    推荐博客: 寒江独钓. 浅谈算法和数据结构: 十 平衡查找树之B树 张洋. MySQL索引背后的数据结构及算法原理 漫画算法:什么是 B+ 树? B树和B+树的插入.删除图文详解 Jeremy Col ...

  7. vim的操作命令

    vim常用命令 在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code ...

  8. 零、常用的Mysql数据库操作语句大全

    零.用户管理: 1.新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2.更改密码: >SET PASSWORD FOR name=PAS ...

  9. xtu summer individual 2 E - Double Profiles

    Double Profiles Time Limit: 3000ms Memory Limit: 262144KB This problem will be judged on CodeForces. ...

  10. Leetcode 274.H指数

    H指数 给定一位研究者论文被引用次数的数组(被引用次数是非负整数).编写一个方法,计算出研究者的 h 指数. h 指数的定义: "一位有 h 指数的学者,代表他(她)的 N 篇论文中至多有 ...