Description

给出一个数字N

Input

第一行为一个正整数T,表示数据组数。
接下来T行为询问,每行包含一个正整数N。
T<=5000,N<=10^7
题解: 求 $\sum_{i=1}^{n}\sum_{j=1}^{n}\varphi(gcd(i,j))$
 
$=\sum_{d=1}^{n}\varphi(d)\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd(i,j)==d]$
 
$=\sum_{d=1}^{n}\varphi(d)\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{n}{d}}[gcd(i,j)==1]$
 
其中 $\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd(i,j)==1]=2\times\sum_{i=1}^{n}\varphi(i)-1$
 
可以用数形结合来思考:
 
$\sum_{i=1}^{n}\sum_{j=1}^{i}[gcd(i,j)==1]=\sum_{i=1}^{n}\varphi(i)$
 
这个式子可以看作是对角线一半的欧拉函数值(以 $i$ 为横坐标,$j$ 为纵坐标)
 
而 $\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd(i,j)==1]$ 正好是对角线折叠过去的结果.
 
不过还要减去 $(1,1)$ 多出来的贡献(只有 $1$ 是和自己本身互质的数)
 
令 $Sum(n)=\sum_{i=1}^{n}\varphi(i)$
 
答案为 $\sum_{d=1}^{n}\varphi(d)\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{n}{d}}[gcd(i,j)==1]$
 
$\Rightarrow\sum_{d=1}^{n}\varphi(d)\times(2\times\sum_{i=1}^{\frac{n}{d}}\varphi(i)-1)$
 
$\Rightarrow\sum_{d=1}^{n}\varphi(d)\times(2\times Sum(\frac{n}{d})-1)$
 
$\Rightarrow2\times\sum_{d=1}^{n}\varphi(d)Sum(\frac{n}{d})-Sum(n)$
 
提前与处理一下欧拉函数前缀和即可.
#include<bits/stdc++.h>
#define maxn 10000003
#define M 10000000
#define ll long long
using namespace std;
void setIO(string s)
{
string in=s+".in";
freopen(in.c_str(),"r",stdin);
}
int cnt;
bool vis[maxn];
int prime[maxn], phi[maxn];
ll sumv[maxn];
inline void Linear_shaker()
{
phi[1]=1;
int i,j;
for(i=2;i<=M;++i)
{
if(!vis[i]) prime[++cnt]=i, phi[i]=i-1;
for(j=1;j<=cnt&&1ll*i*prime[j]<=M;++j)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
for(i=1;i<=M;++i) sumv[i]=sumv[i-1]+phi[i];
}
inline void solve()
{
int n,i,j;
scanf("%d",&n);
ll re=0;
for(i=1;i<=n;i=j+1)
{
j=(n/(n/i));
re+=(sumv[j]-sumv[i-1])*(sumv[n/i]*2-1);
}
printf("%lld\n",re);
}
int main()
{
// setIO("input");
Linear_shaker();
int T;
scanf("%d",&T);
while(T--) solve();
return 0;
}

  

BZOJ 4804: 欧拉心算 欧拉函数的更多相关文章

  1. bzoj 4804 欧拉心算 欧拉函数,莫比乌斯

    欧拉心算 Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 408  Solved: 244[Submit][Status][Discuss] Descr ...

  2. 【bzoj4804】欧拉心算 欧拉函数

    题目描述 给出一个数字N 输入 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N<=10^7 输出 按读入顺序输出答案. 样例输入 1 1 ...

  3. bzoj4804: 欧拉心算 欧拉筛

    题意:求\(\sum_{i=1}^n\sum_{j=1}^n\phi(gcd(i,j))\) 题解:\(\sum_{i==1}^n\sum_{j=1}^n\sum_{d=1}^n[gcd(i,j)== ...

  4. BZOJ_4804_欧拉心算_欧拉函数

    BZOJ_4804_欧拉心算_欧拉函数 Description 给出一个数字N Input 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N&l ...

  5. 【BZOJ4804】欧拉心算 莫比乌斯反演+线性筛

    [BZOJ4804]欧拉心算 Description 给出一个数字N Input 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N<=10 ...

  6. 【bzoj4804】欧拉心算 解题报告

    [bzoj4804]欧拉心算 Description 给出一个数字\(N\),计算 \[\sum_{i=1}^n\sum_{j=1}^n \varphi(\gcd(i,j))\] Input 第一行为 ...

  7. 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载

    title: 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载 tags: -RecyclerView,下拉刷新,上拉加载更多 grammar_cjkRuby: true - ...

  8. iscroll.js 下拉刷新和上拉加载

    html代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  9. IOS 开发下拉刷新和上拉加载更多

    IOS 开发下拉刷新和上拉加载更多 简介 1.常用的下拉刷新的实现方式 (1)UIRefreshControl (2)EGOTTableViewrefresh (3)AH3DPullRefresh ( ...

随机推荐

  1. MYSQL5.5 linux 多实例

    安装过程 cmake 安装参照上一篇 https://www.cnblogs.com/lixuchun/p/9240888.html 多实例采用 /data 目录作为mysql多实例的总的根目录,然后 ...

  2. 20191105 《Spring5高级编程》笔记-第5章

    第5章 Spring AOP 面向切面编程(AOP)是面向对象编程(OOP)的补充.AOP通常被称为实施横切关注点的工具.术语横切关注点是指应用程序中无法从应用程序的其余部分分解并且可能导致代码重复和 ...

  3. oracle--权限的传递

    sys 用户 普通授权lisi grant alter any table to lisi; 将权限指定admin ,可以权限传递给其他用户 grant alter any table to lisi ...

  4. Java相关面试题总结+答案(六)

    [Spring/Spring MVC] 90. 为什么要使用 spring? spring 提供了 IOC 技术,spring 容器会帮你管理依赖的对象,从而不需要自己创建和管理依赖对象了,更轻松的实 ...

  5. mybatis工作流程&源码详解

    该篇主要讲解的是mybatis从seesion创建到执行sql语句的流程 流程主线: 1.创建SqlSessionFactoryBuilder 2.创建会话工厂SqlSessionFactory 3. ...

  6. Codeforces 429E(欧拉回路)

    题面 传送门 题目大意: 有n条线段,每条线段染红色或蓝色,使得数轴上每个点被红色线段覆盖的次数与被蓝色线段覆盖数差的绝对值小于等于1.输出染色方案. 分析 题意其实可以这样理解: 一段初始全为0 的 ...

  7. 从ES6重新认识JavaScript设计模式: 装饰器模式

    1 什么是装饰器模式 向一个现有的对象添加新的功能,同时又不改变其结构的设计模式被称为装饰器模式(Decorator Pattern),它是作为现有的类的一个包装(Wrapper). 可以将装饰器理解 ...

  8. 最全的 Java 知识总结- Github 日增 10 star

    项目地址: 如果觉得有帮助,希望大家给个 star 鼓励以下:同时也希望大家多多 fork,一起加入进来. 为什么选择做这个开源项目 首先,希望提高自己:因为选择做这个,自己肯定就会花时间去提高自己的 ...

  9. c++知识点总结3

    http://akaedu.github.io/book/ week1 引用:相当于变量的别名.下面r和n就相当于同一回事 ; int &r=n; 引用做函数参数: void swap(int ...

  10. iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别

    依旧本着尊重原创和劳动者的原则,将地址先贴在前面: http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html,作者Nonato 以下内 ...