这题很好啊,好在我没做出来。。。大概分析了一下,题目大概意思就是求

问所有满足1<=i<=n且i与m互素的ai之和

最开始我们队的做法是类似线性筛的方法去筛所有数,把数筛出来后剩下数即可,但是这样的是时间复杂度十分大,我们需要遍历每个质因

的倍数,这样最坏的复杂度是很大的1e8,因为我们需要把i的倍数筛到1e8,这样肯定不行,那么想想其他办法

我们想到了容斥-----(赛后想到的)

我们可以推处一个公式ai=i*i+i;

那么ai的前n项和Tn=n*(n+1)*(2*n+1)/6+n*(n+1)/2;

我们知道了前N项和,再减去和M不互质的数的贡献即可,那么怎么利用上面式子算贡献呢???

根据算数基本定理将m分解,与m不互素的就是至少有其中一个因子,算所有的所以要容斥

对于每个因子积sum,会形成sum,2*sum,3*sum...[n/sum]*sum这些不互素的数,

设k=[n/sum],我们把这些数提出一个sum

那么这些数变成了sum*(1+2+3+....+k)那么在这个sum下,这个贡献T=k*(k+1)*(2*k+1)/6*i*i+k*(k+1)/2*i;

有人回想为什么??需要乘以i*i和i呢??我们可以看一下原来的an=i*i+i;那么前an=(k*i)*(k*i)+k*i=i*i*k*k+k*i;

如果没看懂,可以看看这个

https://blog.csdn.net/lngxling/article/details/82530798

我的代码

  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<algorithm>
  5. #include<math.h>
  6. #define ll long long
  7. using namespace std;
  8. const ll mod = 1e9+;
  9. ll inv6=;
  10. ll inv2=;
  11. ll a[];
  12. ll sum(ll n,ll i){
  13. n=n/i;
  14. ll ans=((n%mod)*(n+)%mod*(*n+)%mod*inv6%mod*i%mod*i%mod+n%mod*(n+)%mod*inv2%mod*i%mod)%mod;
  15. return ans;
  16. };
  17. int main(){
  18. long long n,m;
  19. int cnt;
  20. int num[];
  21. while(~scanf("%lld%lld",&n,&m)){
  22. int tmp=m;
  23. cnt=;
  24. while(tmp!=){
  25. int flag=;
  26. for (int i=;i<=sqrt(m);i++){
  27. if (tmp%i==){
  28. num[cnt]=i;
  29. cnt++;
  30. flag=;
  31. }
  32. while(tmp%i==){
  33. tmp/=i;
  34. }
  35. //cout<<"--"<<endl;
  36. }
  37. if(flag== && tmp!=){
  38. num[cnt]=tmp;
  39. cnt++;
  40. break;
  41. }
  42. }
  43. ll ans=sum(n,);
  44. ll ans2=;
  45. //cout<<"--"<<endl;
  46. for (int i=;i<(<<cnt);i++){
  47. int flag=;
  48. ll temp=;
  49. for (int j=;j<cnt;j++)
  50. if (i&(<<j))
  51. {
  52. // cout<<"--"<<endl;
  53. flag++;
  54. temp=temp*num[j]%mod;
  55. }
  56. // cout<<"---"<<endl;
  57. temp=sum(n,temp);
  58. //cout<<"---"<<endl;
  59. if (flag%==)
  60. {
  61. ans2=(ans2%mod+temp%mod)%mod;
  62. }else {
  63. ans2=(ans2%mod-temp%mod+mod)%mod;
  64. }
  65. }
  66. printf("%lld\n",(ans%mod-ans2%mod+mod)%mod);
  67. }
  68. return ;
  69. }

ACM-ICPC 2018 沈阳赛区网络预赛 G. Spare Tire的更多相关文章

  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 (容斥原理)

    可推出$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} ...

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

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

  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. linux调度器源码分析 - 概述(一)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 调度器作为操作系统的核心部件,具有非常重要的意义,其随着linux内核的更新也不断进行着更新.本系列文章通 ...

  2. kettle用mysql创建资源库执行sql代码报错

    一.原因:  sql语句里边使用 'Y' 'N'  给boolean类型的赋值产生sql失败    二.解决方法:将insert语句中‘Y’或‘N’ 改成TRUE或FALSE即可,共两张表3个地方  ...

  3. zk理解(转载自邬兴亮---www.cnblogs.com/wuxl360/p/5817471.html)

    一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术 主要用来解决分布式环境当中多个进程之间的 ...

  4. 17秋 软件工程 团队第五次作业 Alpha Scrum11

    17秋 软件工程 团队第五次作业 Alpha Scrum11 今日完成的任务 世强:管理员头像图片上传和显示逻辑处理,活动添加及上传图片: 港晨:完成Web界面前后端对接: 树民:标准化后端接口格式: ...

  5. EasyUI tabs指定要显示的tab

    <div id="DivBox"  class="easyui-tabs" style="width: 100%; height: 100%;& ...

  6. UG/NX 8.0安装方法(图文详解)

    UG8.0,自从被西门子收购后改名为NX,也称NX8.0,作为一款非常优秀三维模具设计软件.他可以针对用户的虚拟产品设计和工艺设计的需求,提供经过实践验证的解决方案.其以全面的设计概念.良好的界面受到 ...

  7. socket 总结

    网络编程之进程:http://www.cnblogs.com/1a2a/p/7428759.html 网络编程之进阶:http://www.cnblogs.com/1a2a/p/7444446.htm ...

  8. 全文索引搜索whoosh

    问题 Whoosh是python中解决索引查找的模块,在讨论索引查找的文章已经对有关索引查找进行了阐述,此处具体说明Whoosh模块的应用. 思路说明 Whoosh的安装 这里有具体内容(链接被被阉割 ...

  9. 编译apache报APR not found

    系统环境: [vagrant@rs-2 download]$ cat /etc/redhat-release  CentOS release 5.6 (Final) [vagrant@rs-2 dow ...

  10. PHP中使用CURL实现GET和POST请求数据

    PHP中使用CURL实现GET和POST请求 一.什么是CURL? cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 ...