又被这神仙题给坑爆了。

神仙题解。

一开始我把lcm变成ij/gcd然后按照常规套路去推,推到最后发现不是miu * Id而是miu · Id......这还搞鬼啊。

正解居然跟这个差不多,先转成求其中一部分的函数,然后再加和......这谁顶得住呀。

大概就是先求这个

一顿操作之后得到了phi有关的式子......

然后原式就是这个

然后带进去推一推就出来杜教筛了...这第一步真是神奇。

最后是这个。

按照套路,前面分块,后面配一个g(x) = x2即可。

 1 #include <cstdio>
 2 #include <map>
 3
 4 typedef long long LL;
 5 const int N = 5000010, T = 5000008;
 6 const LL MO = 1000000007;
 7
 8 std::map<LL, LL> mp;
 9 LL inv2, inv6, F[N];
10 int p[N], top, phi[N];
11 bool vis[N];
12
13 inline LL qpow(LL a, LL b) {
14     LL ans = 1;
15     while(b) {
16         if(b & 1) ans = ans * a % MO;
17         a = a * a % MO;
18         b = b >> 1;
19     }
20     return ans;
21 }
22
23 inline LL S(LL x) {
24     x %= MO;
25     return x * (x + 1) / 2 % MO;
26 }
27
28 inline LL G(LL x) {
29     x %= MO;
30     return (x << 1 | 1) % MO * (x + 1) % MO * x % MO * inv6 % MO;
31 }
32
33 inline LL H(LL x) {
34     LL temp = S(x);
35     return temp * temp % MO;
36 }
37
38 inline void getp(int n) {
39     phi[1] = 1;
40     for(int i = 2; i <= n; i++) {
41         if(!vis[i]) {
42             p[++top] = i;
43             phi[i] = i - 1;
44         }
45         for(int j = 1; j <= top && i * p[j] <= n; j++) {
46             vis[i * p[j]] = 1;
47             if(i % p[j] == 0) {
48                 phi[i * p[j]] = phi[i] * p[j];
49                 break;
50             }
51             phi[i * p[j]] = phi[i] * (p[j] - 1);
52         }
53     }
54     for(int i = 1; i <= n; i++) {
55         F[i] = (F[i - 1] + 1ll * i * i % MO * phi[i] % MO) % MO;
56     }
57     return;
58 }
59
60 LL getF(LL x) {
61     if(x <= 0) return 0;
62     if(x <= T) return F[x];
63     if(mp.count(x)) return mp[x];
64     LL ans = H(x);
65     for(LL i = 2, j; i <= x; i = j + 1) {
66         j = x / (x / i);
67         ans -= (G(j) - G(i - 1) + MO) * getF(x / i) % MO;
68         ans %= MO;
69     }
70     return mp[x] = (ans + MO) % MO;
71 }
72
73 int main() {
74     inv2 = (MO + 1) / 2;
75     inv6 = qpow(6, MO - 2);
76     getp(T);
77     LL ans = 0, n;
78     scanf("%lld", &n);
79     for(LL i = 1, j; i <= n; i = j + 1) {
80         j = n / (n / i);
81         ans += S(n / i) * (getF(j) - getF(i - 1) + MO) % MO;
82         ans %= MO;
83     }
84     printf("%lld\n", (ans + MO) % MO);
85     return 0;
86 }

AC代码

转载于:https://www.cnblogs.com/huyufeifei/p/10448243.html

51nod1238 最小公倍数之和 V3相关推荐

  1. [51nod1238] 最小公倍数之和 V3(杜教筛)

    题面 传送门 题解 懒了--这里写得挺好的-- //minamoto #include<bits/stdc++.h> #define R register #define ll long ...

  2. 51nod1238. 最小公倍数之和 V3(数论)

    题目链接 https://www.51nod.com/Challenge/Problem.html#!#problemId=1238 题解 本来想做个杜教筛板子题结果用另一种方法过了...... 所谓 ...

  3. [51 nod 1238] 最小公倍数之和 V3(杜教筛)

    1238 最小公倍数之和 V3 推式子 ∑i=1n∑j=1nlcm(i,j)=∑i=1n∑j=1nijgcd(i,j)=∑d=1n∑i=1n∑j=1nijd(gcd(i,j)==d)=∑d=1nd∑i ...

  4. 51 NOD 1238 最小公倍数之和 V3

    原题链接 最近被51NOD的数论题各种刷--(NOI快到了我在干什么啊! 然后发现这题在网上找不到题解--那么既然A了就来骗一波访问量吧-- (然而并不怎么会用什么公式编辑器,写得丑也凑合着看吧-- ...

  5. 51nod 1238 最小公倍数之和 V3

    背景: luogu P1829 \text{luogu P1829 }luogu P1829 [国家集训队]Crash的数字表格 / JZPTAB的加强版. 题目传送门: http://www.51n ...

  6. C语言易错题--求最大公约数与最小公倍数之和(辗转相除法)

    题目来源:牛客网编程入门训练--BC115  小乐乐与欧几里得 输入描述: 每组输入包含两个正整数n和m.(1 ≤ n ≤ 109,1 ≤ m ≤ 109) 输出描述: 对于每组输入,输出一个正整数, ...

  7. 1190 最小公倍数之和 V2

    1190 最小公倍数之和 V2 ∑i=ablcm(i,b)∑i=abi×bgcd⁡(i,b)b∑d∣b∑i=⌈ad⌉bdi[gcd(i,bd)=1]b∑d∣b∑k∣bdμ(k)k∑i=⌈⌈ad⌉k⌉a ...

  8. P3911 最小公倍数之和 (atcoder C - LCMs)(反演)

    P3911 最小公倍数之和 推式子 ∑i=1n∑j=1nlcm(ai,aj)下面的n=max(ai),ci为i在原数组中出现的次数∑i=1n∑j=1nijgcd(ij)cicj=∑d=1n1d∑i=1 ...

  9. 51 NOD 1363 最小公倍数之和 (欧拉函数思维应用)

    1363 最小公倍数之和 推式子 ∑i=1nlcm(i,n)=n∑i=1nigcd(i,n)=n∑d∣n∑i=1nid(gcd(i,n)==d)=n∑d∣n∑i=1ndi(gcd(i,nd)==1)= ...

最新文章

  1. Vue教程6【完结】【vue-router】路由,路由传参,编程式路由导航,缓存路由组件,路由守卫,路由模式,vue ui组件库
  2. python常见错误-Python错误及异常总结汇总
  3. 【产品干货】Uber产品经理首次在中国自述产品理念:我们看中的并非只是钱
  4. python 函数参数_python之函数(二)——函数参数详解
  5. javascript 面向对象编程小记
  6. 《C++ Primer 5th》笔记(3 / 19):字符串、向量、迭代器和数组
  7. Spring Boot基础学习笔记24:RabbitMQ安装以及整合环境搭建
  8. java环境卡顿_解决Emacs在windows使用的问题,比如环境设置、卡顿……
  9. [Spark]-编译(2.3.1)部署(YARN-Cluster)
  10. svn 迁移到git下全过程
  11. 汇编语言指令用法大全
  12. 欧派caxa设计软件_CAXA软件三维设计的基本使用方法
  13. React的调和过程(Reconciliation)
  14. nginx—动静分离
  15. 多核CPU 跟 进程/线程
  16. 电商订单模块的订单表与订单商品表关系,1个订单对应多个商品的页面布局,el表达式去掉重复的数据。
  17. 操作系统:进程同步演示
  18. java widget_Java FavoritesWidget类代码示例
  19. 亲爱的数据工作者,教你绕开13个雷区的方法
  20. Angluar WARNING System.import() is deprecated and will be removed soon. Use import() instead

热门文章

  1. 怎么体验华为鸿蒙系统,华为mate40升级鸿蒙系统体验_华为mate40升级鸿蒙系统使用感受...
  2. PHP框架半透明,CSS设定一个元素半透明
  3. 神雕侠侣手游服务器维修点,《神雕侠侣》2021年4月1日更新维护新服开启公告
  4. python与数据思维基础目录_python入门知识思维路线图及环境配置
  5. java if 没有_java – 如何做一个决定没有if语句
  6. php生成背景并加字,PHP给图片添加文字水印实例
  7. 数学建模 概率论与数理统计
  8. 亲测好用!机器学习环境搭建及基础
  9. FPGA的设计艺术(12)使用parameter构建可重用的逻辑设计
  10. FPGA的配置引脚以及配置过程