真是一道“简单”的数学题呢~

反演题, 化式子.
\[
ans=\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j) \\ =\sum_{i=1}^n\sum_{j=1}^n\sum_{d=1}^nij[gcd(i,j)=d]\\ =\sum_{d=1}^nd\sum_{i=1}^n\sum_{i=1}^nij[gcd(i,j)=1]\\ =\sum_{d=1}^nd^3\sum_{i=1}^{\left \lfloor \frac nd \right \rfloor}\sum_{j=1}^{\left \lfloor \frac nd \right \rfloor}ij[gcd(i,j)=1] \\ =\sum_{d=1}^nd^3\sum_{i=1}^{\left \lfloor \frac nd \right \rfloor}i\sum_{j=1}^{\left \lfloor \frac nd \right \rfloor}j[gcd(i,j)=1] \\ =\sum_{d=1}^nd^3\sum_{i=1}^{\left \lfloor \frac nd \right \rfloor}i\sum_{j=1}^{\left \lfloor \frac nd \right \rfloor}j\sum_{t|i,j}\mu(t) \\ i=tp,j=tq,\\ =\sum_{d=1}^nd^3\sum_{t=1}^{\left \lfloor \frac nd \right \rfloor}t^2\cdot\mu(t)\sum_{p=1}^{\left \lfloor \frac n{td} \right \rfloor}p\sum_{q=1}^{\left \lfloor \frac n{td} \right \rfloor}q \\ \because \sum_{i=1}^n=\frac {n(n+1)}2\\ \therefore ans=\sum_{d=1}^nd^3\sum_{t=1}^{\left \lfloor \frac nd \right \rfloor}t^2\cdot\mu(t)[\frac{n(n+1)}{2}]
\]
然后我们令\(T=id\), 枚举\(T\),
\[
ans=\sum_{T=1}^n[\frac{\left \lfloor \frac nT \right \rfloor(\left \lfloor \frac nT \right \rfloor+1)}{2}]^2\sum_{d|T}d^3(\frac Td)^2\mu(\frac Td) \\
=\sum_{T=1}^n[\frac{\left \lfloor \frac nT \right \rfloor(\left \lfloor \frac nT \right \rfloor+1)}{2}]^2T^2\sum_{d|T}d\mu(\frac Td) \\
=\sum_{T=1}^n[\frac{\left \lfloor \frac nT \right \rfloor(\left \lfloor \frac nT \right \rfloor+1)}{2}]^2T^2(n*\mu)(T) \\
=\sum_{T=1}^n[\frac{\left \lfloor \frac nT \right \rfloor(\left \lfloor \frac nT \right \rfloor+1)}{2}]^2T^2\varphi(T)
\]
然后我们令\(X=[\frac{\left \lfloor \frac nT \right \rfloor(\left \lfloor \frac nT \right \rfloor+1)}{2}]^2, f(T)=T^2\varphi(T)\), 这样就变成了
\[
ans=\sum_{T=1}^nXf(T)
\]
\(X\)可以分块然后\(O(1)\)算, 那我们只要能求出\(f(T)\)的前缀和就行了.
那\(n<=10^{10}\)要用杜教筛. 我们想一下杜教筛的通式:
\[
s_f(x)=\frac{s_{f*g}(x)-\sum_{i=2}^ns_f(\left \lfloor \frac ni \right \rfloor)g(i)}{g(1)}
\]
其中\(g(x)\)和\((f*g)(x)\)是易求前缀和的函数.
看到这种乘积的前缀和我们又想到了之前做lcm之和的提出乘积中某一项的高端操作, 我们就试着让\(g(x)\)去卷\(n^2\)(就是\(f(x)=x^2\)啦).
然后
\[
g(x)=(n^2\cdot\varphi)(x) \\
(g*n^2)(x)=((n^2\cdot\varphi)*n^2)(x)=(n^2\cdot(\varphi*1))(x)=(n^2\cdot n)(x)=n^3(x)
\]
然后\(n^3(x)\)的前缀和也是有公式的可以\(O(1)\)算, 这样我们就令\(g(x)=n^2(x), (f*g)(x)=n^3(x)\), 然后扔到上面的杜教筛通式里做就好啦~

复杂度可能是\(O(\sqrt n*n^{\frac 23})\)的, 不过这应该是最优的复杂度了..

代码应该不太好写, 懒得写了QAQ

【学术篇】luogu3768 简单的数学题(纯口胡无代码)的更多相关文章

  1. [Luogu3768]简单的数学题

    题面戳我 题意:求 \[\sum_{i=1}^{n}\sum_{j=1}^{n}ij\gcd(i,j)\] \(n\le10^{10}\) sol \[ans=\sum_{d=1}^{n}d\sum_ ...

  2. Luogu3768简单的数学题

    题目描述 题解 我们在一通化简上面的式子之后得到了这么个东西. 前面的可以除法分块做,后面的∑T2∑dµ(T/d)是积性函数,可以线性筛. 然后这个数据范围好像不太支持线性筛,所以考虑杜教筛. 后面那 ...

  3. [luogu3768] 简单的数学题 [杜教筛]

    题面: 传送门 实际上就是求: 思路: 看到gcd就先反演一下,过程大概是这样: 明显的一步反演 这里设,S(x)等于1到x的和 然后把枚举d再枚举T变成先枚举T再枚举其约数d,变形: 后面其中两项展 ...

  4. iOS开发UI篇—Quartz2D简单使用(二)

    iOS开发UI篇—Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...

  5. 【Luogu3768】简单的数学题(莫比乌斯反演,杜教筛)

    [Luogu3768]简单的数学题(莫比乌斯反演,杜教筛) 题面 洛谷 \[求\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j)\] $ n<=10^9$ 题解 很明显的把\( ...

  6. iOS开发数据库篇—SQLite简单介绍

    iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1 ...

  7. iOS开发UI篇—Quartz2D简单介绍

    iOS开发UI篇—Quartz2D简单介绍 一.什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\ ...

  8. 【转】 iOS开发数据库篇—SQLite简单介绍

    开始学SQLite啦, 原文: http://www.cnblogs.com/wendingding/p/3868893.html iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中 ...

  9. iOS开发多线程篇—多线程简单介绍

    iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...

随机推荐

  1. ASP.NET MVC 学习笔记之View 和Redriect的区别

    首先先说一下Redriect 和RedirectToAction 两个没什么区别,都是向浏览器发送302 Found相应,再有浏览器向对应的url进行请求 只是参数的意义不同而已 再说Redirect ...

  2. 在Mac OS终端的Terminal 中使用Sublime Text3

    查看环境变量: $ echo $PATH $ /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin 创建软链接: $ sudo ln -s /Application ...

  3. day11 python名称空间 作用域

    day11 python   一.三元运算符 def func(a, b):     return a if a > b else b   print(func(44,66))     二:函数 ...

  4. python 爬取头条视频

    知识点总结 1. 利用webdriver 模拟浏览器访问 from selenium import webdriver 2.import requests 3. from bs4 import Bea ...

  5. Linux shell脚本编程if语句的使用方法(条件判断)

    if 语句格式if  条件then Commandelse Commandfi        别忘了这个结尾If语句忘了结尾fitest.sh: line 14: syntax error: unex ...

  6. hive自定义函数UDF UDTF UDAF

    Hive 自定义函数 UDF UDTF UDAF 1.UDF:用户定义(普通)函数,只对单行数值产生作用: UDF只能实现一进一出的操作. 定义udf 计算两个数最小值 public class Mi ...

  7. JS中的call()、apply() 以及 bind()方法用法总结

    JS中的call()方法和apply()方法用法总结  : 讲解: 调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域. function add(c,d){ return thi ...

  8. js类数组转数组的方法(ArrayLike)

    1. 什么是类数组ArrayLike(类数组  就是一个普通的  js对象) 类数组对象必须含有 length 属性,且元素属性名必须是数值或者可转换为数值的字符. 类数组对象不是数组对象,所以没有数 ...

  9. Qt 线程基础(QThread、QtConcurrent、QThreadPool等)

      使用线程 基本上有种使用线程的场合: 通过利用处理器的多个核使处理速度更快. 为保持GUI线程或其他高实时性线程的响应,将耗时的操作或阻塞的调用移到其他线程. 何时使用其他技术替代线程 开发人员使 ...

  10. debian 8 安装 codeblocks

    CodeBlocks优点: 1.所占资源少,对电脑硬件的要求低 2.开源软件,可以查看源代码,虽然我不会修改,但是如果我做一个IDE的话,我一定会参考这个伟大的软件的. 3.最重要的是,它完全跨了三大 ...