51nod1238 最小公倍数之和 V3

又被这神仙题给坑爆了。
神仙题解。
一开始我把lcm变成ij/gcd然后按照常规套路去推,推到最后发现不是miu * Id而是miu · Id......这还搞鬼啊。
正解居然跟这个差不多,先转成求其中一部分的函数,然后再加和......这谁顶得住呀。
大概就是先求这个

一顿操作之后得到了phi有关的式子......
然后原式就是这个

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

按照套路,前面分块,后面配一个g(x) = x2即可。
#include <cstdio>
#include <map> typedef long long LL;
const int N = , T = ;
const LL MO = ; std::map<LL, LL> mp;
LL inv2, inv6, F[N];
int p[N], top, phi[N];
bool vis[N]; inline LL qpow(LL a, LL b) {
LL ans = ;
while(b) {
if(b & ) ans = ans * a % MO;
a = a * a % MO;
b = b >> ;
}
return ans;
} inline LL S(LL x) {
x %= MO;
return x * (x + ) / % MO;
} inline LL G(LL x) {
x %= MO;
return (x << | ) % MO * (x + ) % MO * x % MO * inv6 % MO;
} inline LL H(LL x) {
LL temp = S(x);
return temp * temp % MO;
} inline void getp(int n) {
phi[] = ;
for(int i = ; i <= n; i++) {
if(!vis[i]) {
p[++top] = i;
phi[i] = i - ;
}
for(int j = ; j <= top && i * p[j] <= n; j++) {
vis[i * p[j]] = ;
if(i % p[j] == ) {
phi[i * p[j]] = phi[i] * p[j];
break;
}
phi[i * p[j]] = phi[i] * (p[j] - );
}
}
for(int i = ; i <= n; i++) {
F[i] = (F[i - ] + 1ll * i * i % MO * phi[i] % MO) % MO;
}
return;
} LL getF(LL x) {
if(x <= ) return ;
if(x <= T) return F[x];
if(mp.count(x)) return mp[x];
LL ans = H(x);
for(LL i = , j; i <= x; i = j + ) {
j = x / (x / i);
ans -= (G(j) - G(i - ) + MO) * getF(x / i) % MO;
ans %= MO;
}
return mp[x] = (ans + MO) % MO;
} int main() {
inv2 = (MO + ) / ;
inv6 = qpow(, MO - );
getp(T);
LL ans = , n;
scanf("%lld", &n);
for(LL i = , j; i <= n; i = j + ) {
j = n / (n / i);
ans += S(n / i) * (getF(j) - getF(i - ) + MO) % MO;
ans %= MO;
}
printf("%lld\n", (ans + MO) % MO);
return ;
}
AC代码
51nod1238 最小公倍数之和 V3的更多相关文章
- 51nod1238 最小公倍数之和 V3 莫比乌斯函数 杜教筛
题意:求\(\sum_{i = 1}^{n}\sum_{j = 1}^{n}lcm(i, j)\). 题解:虽然网上很多题解说用mu卡不过去,,,不过试了一下貌似时间还挺充足的,..也许有时间用phi ...
- [51nod1238]最小公倍数之和V3
来自FallDream的博客,未经允许,请勿转载,谢谢. ----------------------------------------------------------------------- ...
- 51nod1238 最小公倍数之和 V3(莫比乌斯反演)
题意 题目链接 Sol 不想打公式了,最后就是求一个 \(\sum_{i=1}^n ig(\frac{N}{i})\) \(g(i) = \sum_{i=1}^n \phi(i) i^2\) 拉个\( ...
- [51Nod1238]最小公倍数之和 V3[杜教筛]
题意 给定 \(n\) ,求 \(\sum_{i=1}^n \sum_{j=1}^n lcm(i,j)\). \(n\leq 10^{10}\) 分析 推式子 \[\begin{aligned} an ...
- 51nod1238. 最小公倍数之和 V3(数论)
题目链接 https://www.51nod.com/Challenge/Problem.html#!#problemId=1238 题解 本来想做个杜教筛板子题结果用另一种方法过了...... 所谓 ...
- [51nod1238] 最小公倍数之和 V3(杜教筛)
题面 传送门 题解 懒了--这里写得挺好的-- //minamoto #include<bits/stdc++.h> #define R register #define ll long ...
- 51NOD 1238 最小公倍数之和 V3 [杜教筛]
1238 最小公倍数之和 V3 三种做法!!! 见学习笔记,这里只贴代码 #include <iostream> #include <cstdio> #include < ...
- 51nod 1238 最小公倍数之和 V3
51nod 1238 最小公倍数之和 V3 求 \[ \sum_{i=1}^N\sum_{j=1}^N lcm(i,j) \] \(N\leq 10^{10}\) 先按照套路推一波反演的式子: \[ ...
- 51 NOD 1238 最小公倍数之和 V3
原题链接 最近被51NOD的数论题各种刷……(NOI快到了我在干什么啊! 然后发现这题在网上找不到题解……那么既然A了就来骗一波访问量吧…… (然而并不怎么会用什么公式编辑器,写得丑也凑合着看吧…… ...
随机推荐
- 【JVM.2】垃圾收集器与内存分配策略
垃圾收集器需要完成的3件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 在前一节中介绍了java内存运行时区域的各个部分,其中程序计数器.虚拟机栈.本地方法栈3个区域随线程而生,随线程而灭:栈 ...
- TomCat 再次发布我的程序
打包成.war的步骤就不说了,之后的配置和上一次的不一样. 在Tomcat的conf下的server.xml文件中,重新配置如下 <Service name="xfwweb" ...
- CentOS 6.7下 Samba服务器的搭建与配置(share共享模式)
https://www.linuxidc.com/Linux/2016-12/138220.htm
- QT 子窗口退出全屏
m_pWidget代表子窗口, 子窗口显示全屏: m_pWidget->setWindowFlags(Qt::Dialog); m_pWidget->showFullScreen(); 子 ...
- ASP.NET MVC应用安全性(一)——自定义错误处理
很多 ASP.NET MVC 开发者都会写出高性能的代码,很好地交付软件,等等.但是却并没有安全性方面的计划. 有一种攻击是攻击者截获最终用户提交的表单数据,将其改变再将修改后的数据发送到服务器. ...
- PAT 1041 考试座位号
https://pintia.cn/problem-sets/994805260223102976/problems/994805281567916032 每个PAT考生在参加考试时都会被分配两个座位 ...
- Docker Compose 容器编排
1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...
- 使用docker-compose 大杀器来部署服务
使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...
- node upgrade bug & node-sass
node upgrade bug & node-sass bug solution rebuild $ npm rebuild node-sass OK
- selenium之批量执行测试用例
把写好的测试用例放在指定目录下,使用discover函数扫描该目录,并根据关键字自动筛选需要执行的用例.本例使用Python3.6版本. # 遍历指定目录,批量执行测试用例 import unitte ...