题意:给出n,求:

\[\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}\gcd(i,j)
\]

多组数据,\(n<=4*10^6\)

sol

今天心血来潮再来写一写式子

首先这里求的是无序对而且还不能相等所以说我第一遍样例都没过

那么如果你求出了\(\sum_{i=1}^{n}\sum_{j=1}^{n}\gcd(i,j)\),你就只要把这个答案减去\(\sum_{i=1}^{n}i\)再除以二就可以了。你可以当做是,你求出的那个东西就是一整个矩阵的和,而题目要求的只是正对角线上方的部分,所以减掉对角线上的再除以2就是答案。

接下来开始大力开式子(接下来我们求的是\(\sum_{i=1}^{n}\sum_{j=1}^{n}\gcd(i,j)\))。

\[ans=\sum_{d=1}^{n}d*\sum_{i=1}^{n}\sum_{j=1}^{n}[\gcd(i,j)==d]
\]

\[=\sum_{d=1}^{n}d*\sum_{i=1}^{n/d}\sum_{j=1}^{n/d}[\gcd(i,j)==1]
\]

\[=\sum_{d=1}^{n}d*\sum_{i=1}^{n/d}\mu(i)\lfloor\frac n{id}\rfloor^2
\]

\[=\sum_{T=1}^{n}\lfloor\frac nT\rfloor^2\sum_{d|T}d*\mu(\frac Td)
\]

然后线性筛这个函数

\[h(T)=\sum_{d|T}d*\mu(\frac Td)
\]

求一个前缀和然后分块T

复杂度\(O(n+T\sqrt n)\)

code

#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
const int N = 4000000;
int gi()
{
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
int pri[N+5],tot,zhi[N+5];
ll low[N+5],h[N+5];
void Mobius()
{
zhi[1]=low[1]=1;h[1]=1;
for (int i=2;i<=N;i++)
{
if (!zhi[i]) low[i]=pri[++tot]=i,h[i]=i-1;
for (int j=1;j<=tot&&i*pri[j]<=N;j++)
{
zhi[i*pri[j]]=1;
if (i%pri[j]==0)
{
low[i*pri[j]]=low[i]*pri[j];
if (low[i]==i)
h[i*pri[j]]=h[i]*pri[j];
else
h[i*pri[j]]=h[i/low[i]]*h[low[i]*pri[j]];
break;
}
low[i*pri[j]]=pri[j];
h[i*pri[j]]=h[i]*h[pri[j]];
}
}
for (int i=1;i<=N;i++)
h[i]+=h[i-1];
}
int main()
{
Mobius();
while (233)
{
int n=gi(),i=1;
if (n==0) break;
ll ans=0;
while (i<=n)
{
int j=n/(n/i);
ans+=(h[j]-h[i-1])*(n/i)*(n/i);
i=j+1;
}
printf("%lld\n",(ans-1ll*(n+1)*n/2)/2);
}
return 0;
}

[UVa11426]最大公约数之和——极限版II的更多相关文章

  1. UVa11426 最大公约数之和(正版)

    题面 求\(\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}gcd(i, j)\) n<=4000000,数据组数T<=100 答案保证在64位带符号整数范围内(long ...

  2. 51nod1188 最大公约数之和 V2

    考虑每一个数对于答案的贡献.复杂度是O(nlogn)的.因为1/1+1/2+1/3+1/4......是logn级别的 //gcd(i,j)=2=>gcd(i/2,j/2)=1=>phi( ...

  3. 51nod 1237 最大公约数之和 V3(杜教筛)

    [题目链接] https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1237 [题目大意] 求[1,n][1,n]最大公约数之和 ...

  4. 51NOD 1237 最大公约数之和 V3 [杜教筛]

    1237 最大公约数之和 V3 题意:求\(\sum_{i=1}^n\sum_{j=1}^n(i,j)\) 令\(A(n)=\sum_{i=1}^n(n,i) = \sum_{d\mid n}d \c ...

  5. 51 nod 1188 最大公约数之和 V2

    1188 最大公约数之和 V2 题目来源: UVA 基准时间限制:2 秒 空间限制:262144 KB 分值: 160 难度:6级算法题   给出一个数N,输出小于等于N的所有数,两两之间的最大公约数 ...

  6. 51nod 1040 最大公约数之和(欧拉函数)

    1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   给出一个n,求1-n这n个数,同n的最大公约数的和.比如: ...

  7. 51nod 1040 最大公约数之和 欧拉函数

    1040 最大公约数之和 题目连接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1040 Description 给 ...

  8. 51nod 1040 最大公约数之和

    给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15   Input 1个数N(N <= ...

  9. 51Nod 最大公约数之和V1,V2,V3;最小公倍数之和V1,V2,V3

    1040 最大公约数之和 给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 输入 1个数N ...

随机推荐

  1. 关于在jsp中的路径问题

    前言: jsp作为javaweb开发中常见的视图技术,我们平时在开发项目使用的过程中,经常会导入一些静态资源,比如css\js\jpg.png等图片格式的文件,这些文件的路径成了问题,经常会出现索引不 ...

  2. Ios App上传步骤

    前言:作为一名IOS开发者,把开发出来的App上传到App Store是必须的.下面就来详细介绍下具体流程. 1.打开苹果开发者中心:https://developer.apple.com 打开后点击 ...

  3. LNMP搭建04 -- 配置Nginx支持PHP

    首先建立存放网页文件的目录,执行 mkdri /usr/local/server/www  然后进入到该目录中 cd /usr/local/server/www 然后创建一个测试文件: phpinfo ...

  4. Linux 安装配置 FTP 服务 (vsftpd)

    1. 安装 vsftpd yum install vsftpd -y 2. 创建用户 record adduser -s /bin/nologin -d /var/RecordFile/ record ...

  5. 一位IT男的7年工作经验总结

    一位IT男的7年工作经验总结 1.分享第一条经验:"学历代表过去.能力代表现在.学习力代表未来." 其实这是一个来自国外教育领域的一个研究结果.相信工作过几年.十几年的朋友对这个道 ...

  6. Oracle批量操作数据库

    1:批量插入 <insert id="insertBatch" parameterType="Java.util.List" > insert in ...

  7. 02 Java类的加载机制

    1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...

  8. Eclipse中如何忽略报错的js文件

    https://jingyan.baidu.com/article/4f7d5712d3701a1a20192786.html

  9. Js比较对Object类型进行排序

    <script> var data=[{name:"121",age:"18",year:"2018"},{name:" ...

  10. PHP 是一门弱类型语言

    PHP 是一门弱类型语言 我们注意到,不必向 PHP 声明该变量的数据类型. PHP 会根据变量的值,自动把变量转换为正确的数据类型. 在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类 ...