题解

这个故事告诉们数论函数不要往分式上跑,你推不出来
好久没推式子了这么明显的转化我都忘了= =

首先\(A(n) = \frac{1}{n} \sum_{i = 1}^{n} \frac{i * n}{gcd(i,n)}\)
然后显然可以把n消掉
\(A(n) = \sum_{i = 1}^{n} \frac{i}{gcd(i,n)}\)
改为枚举约数
\(A(n) = \sum_{d = 1}^{n} \frac{1}{d}\sum_{i = 1}^{n} i [gcd(i,n) == d]\)
\(A(n) = \sum_{d | n} \sum_{i = 1}^{\frac{n}{d}} i [gcd(i,\frac{n}{d}) == 1]\)
有个欧拉函数的性质是,小于这个数的且与这个数互质的数的和是
\(\frac{n \phi(n) + [n = 1]}{2}\) 挺好理解的,因为一个与n互质的数p,n - p也和n互质
\(\frac{n \phi(n) + [n = 1]}{2} = \sum_{i = 1}^{n} i [gcd(i,n) == 1]\)
\(A(n) = \frac{1}{2} (\sum_{d | n} \frac{n}{d} \phi(\frac{n}{d}) + 1)\)

\(F(n) = \sum_{i = 1}^{n} A(i)\)
\(F(n) = \frac{1}{2} (\sum_{i = 1}^{n} \sum_{d | i} \frac{i}{d} \phi(\frac{i}{d}) + n)\)
\(F(n) = \frac{1}{2} (\sum_{i = 1}^{n} \sum_{d | i} d \phi(d) + n)\)
\(F(n) = \frac{1}{2} (\sum_{i = 1}^{n} \sum_{d = 1}^{\frac{n}{i}} d \phi(d) + n)\)

我们发现这个东西可以构造卷积啊
\(\sum_{d = 1}^{n} d \phi(d)\)
卷上一个\(Id(x) = x^{2}\)
那么我们就有
\(\sum_{i = 1}^{n} i^2 = \sum_{i = 1}^{n} \sum_{d | i}d \phi(d) \frac{i}{d}\)
\(\sum_{i = 1}^{n} i^2 = \sum_{k = 1}^{n} k \sum_{d = 1}^{\frac{n}{k}}d \phi(d)\)
那么就有
\(S(n) = \frac{n(n +1)(2n + 1)}{6} - \sum_{i = 2}^{n} i S(\lfloor \frac{n}{i} \rfloor)\)
然后用数论分块求\(F(n)\)即可

题解

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <map>
//#define ivorysi
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define mo 974711
#define MAXN 1000000
#define RG register
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {res = 0;char c = getchar();T f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 + c - '0';c = getchar();}res *= f;
}
template<class T>
void out(T x) {if(x < 0) {putchar('-');x = -x;}if(x >= 10) {out(x / 10);}putchar('0' + x % 10);
}
int N;
const int MOD = 1000000007;
struct node {int x,v,next;
}E[100006];
int head[mo + 5],sumE,Inv2,Inv6;
int prime[MAXN + 5],tot,S[MAXN + 5],phi[MAXN + 5];
bool nonprime[MAXN + 5];
int inc(int a,int b) {a = a + b;if(a >= MOD) a -= MOD;return a;
}
int mul(int a,int b) {return 1LL * a * b % MOD;
}
void add(int u,int x,int v) {E[++sumE].x = x;E[sumE].v = v;E[sumE].next = head[u];head[u] = sumE;
}
void Insert(int x,int v) {add(x % mo,x,v);
}
int Query(int x) {int u = x % mo;for(int i = head[u] ; i ; i = E[i].next) {if(E[i].x == x) return E[i].v;}return -1;
}
int f(int x) {if(x <= MAXN) return S[x];int c = Query(x);if(c != -1) return c;int res = 0;for(int i = 2 ; i <= x ; ++i) {int r = x / (x / i);res = inc(res,1LL * (r - i + 1) * (r + i) / 2 % MOD * f(x / i) % MOD);i = r;}res = inc(1LL * x * (x + 1) % MOD * (2 * x + 1) % MOD * Inv6 % MOD,MOD - res);Insert(x,res);return res;
}
int calc(int x) {int res = 0;for(int i = 1 ; i <= x ; ++i) {int r = x / (x / i);res = inc(res,mul(r - i + 1,f(x / i)));i = r;}res = inc(res,x);res = mul(res,Inv2);return res;
}
void Solve() {phi[1] = 1;S[1] = 1;for(int i = 2 ; i <= MAXN ; ++i) {if(!nonprime[i]) {prime[++tot] = i;phi[i] = i - 1;}for(int j = 1 ; j <= tot ; ++j) {if(prime[j] > MAXN / i) break;nonprime[prime[j] * i] = 1;if(i % prime[j] == 0) {phi[i * prime[j]] = phi[i] * prime[j];break;}else phi[i * prime[j]] = phi[i] * (prime[j] - 1);}S[i] = inc(S[i - 1],mul(phi[i],i));}Inv2 = (MOD + 1) / 2;Inv6 = 1LL * Inv2 * (MOD + 1) / 3 % MOD; int a,b;read(a);read(b);out(inc(calc(b),MOD - calc(a - 1)));enter;
}
int main() {
#ifdef ivorysifreopen("f1.in","r",stdin);
#endifSolve();return 0;
}

转载于:https://www.cnblogs.com/ivorysi/p/9157831.html

【51nod】1227 平均最小公倍数相关推荐

  1. 51 NOD 1227 平均最小公倍数(杜教筛)

    1227 平均最小公倍数 推式子 S(n)=∑i=1n∑j=1ilcm(i,j)i=∑i=1n∑j=1iijigcd(i,j)=∑i=1n∑j=1ijgcd(i,j)=∑i=1n∑d=1i∑j=1ij ...

  2. 浅谈积性函数求前缀和

    转载至https://blog.csdn.net/skywalkert/article/details/50500009 前置技能 积性函数的定义 若f(n)f(n)的定义域为正整数域,值域为复数,即 ...

  3. 知识点 - 数论函数导论

    知识点 - 数论进阶 abstract:整除分块,积性函数,线性筛,莫比乌斯反演,迪利克雷卷积,积性函数前缀和,杜教筛,阁洲筛,min_25筛 0.引入 Gym - 101485D debugging ...

  4. 浅谈一类积性函数的前缀和(转载)

    本文转自:http://blog.csdn.net/skywalkert/article/details/50500009 另外,莫比乌斯反演和杜教筛其他可转到 http://blog.leanote ...

  5. mac python2.7升级到3.7_Mac 升级 Python2.7 到 Python3.5

    2.安装之后,去  /Library/Frameworks/Python.framework/Versions/3.5 下检查一下是不是多了一个3.5 如果没有就在/System/Library/Fr ...

  6. 【算法总结】积性函数相关

    [线性筛] [模板代码] [线性筛质数] 1 int main() 2 { 3 n=read(); 4 for(int i=2;i<=n;i++) 5 { 6 if(!f[i])pri[++cn ...

  7. 【算法专题】积性函数

    [参考] ★浅谈一类积性函数的前缀和 by skywalkert 任之洲数论函数.pdf 论逗逼的自我修养之寒假颓废记 by jiry_2 杜教筛 [学习笔记][更新中] by Candy? [变化技 ...

  8. 51Nod【1419】-最小公倍数挑战

    题目 几天以前,我学习了最小公倍数.玩得挺久了,想换换口味. 我不想用太多的数字,我想从1到n中选三个数字(可以相同).使得他们的最小公倍数最大. 收起 输入 单组测试数据. 第一行有一个整数n (1 ...

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

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

最新文章

  1. binlog数据库不写入binlog_mysql 为什么不能仅仅用 binlog 保证不丢数据
  2. selenium之 webdriver与三大浏览器版本映射表(更新至v2.29)
  3. 计算机组成原理DMA方式原理,计算机组成原理4(程序查询方式、程序中断方式、DMA方式及其I/O接口电路)...
  4. 【robotframework】robotframework基本使用
  5. 如何扩展以太坊:分片
  6. ios 检测是否联网_秋招|阿里 iOS 五轮面经分享,已收到阿里的意向书
  7. aix系统输入oracle命令,aix 简单的系统命令
  8. JWPlayer Uncaught Error: Invalid SRT file
  9. 用js实现图片的无缝滚动效果
  10. tomcat 访问权限设置
  11. 记录PHP错误日志 display_errors与log_errors的区别
  12. 解决 Symantec SEP 12.1 经常扫描的问题
  13. kuangbin RMQ
  14. CSS(刷漆)学习总结
  15. Typora免费版下载【Mac、Windows】
  16. IDEA类注释模板设置
  17. 趋势线与123法则应用图解,很多大佬偷偷在用
  18. 薪火相传 点亮企业数智化舞台—— CDEC2021中国数字智能生态大会西安收官
  19. java基于Springboot+vue的球鞋销售商城网站 elementui
  20. redis的incr和incrby命令

热门文章

  1. 【计算机网络笔记】物理层:概念传输媒体传输方式
  2. android强制结束进程_Android完全强制退出应用程序
  3. Android中kt转java_将我现有的andorid工作室项目转换为kotlin?
  4. c语言从excal读取字符串,C语言操作EXCEL文件(读写)
  5. java制作纯字rpg小游戏_求java rpg小游戏源代码 最好是文字rpg 不需要很复杂 只是交作业用...
  6. epoll边缘触发_epoll事件通知机制详解,水平触发和边沿触发的区别
  7. 如何用css显示一个图片中多个小图标
  8. 【初赛】排列组合的一点笔记
  9. java中位于集合框架顶层位置的是,CoreJava第二次内测有答案
  10. python为mysql设置id自增长_python mysql自增字段AUTO_INCREMENT值的修改方式