51 nod 1188 最大公约数之和 V2

- 第1行:1个数T,表示后面用作输入测试的数的数量。(1 <= T <= 50000)
- 第2 - T + 1行:每行一个数N。(2 <= N <= 5000000)
- 共T行,输出最大公约数之和。
- 3
- 10
- 100
- 200000
- 67
- 13015
- 143295493160
- /*
- 51 nod 1188 最大公约数之和 V2
- [1,i]中与i的 GCD(x,i)=t的个数可以看成 GCD(x/t,i/t)=1 ;即与i/t互质的个数。欧拉函数phi
- 但是我们要求的两两互质的情况,如果考虑枚举 最大公约数的值。那么[1,i]有phi[i]个,同理[1,i-1]中
- 有phi[i-1]个,所以求出欧拉函数后累加起来。
- //超时,主要是枚举的时候 O(n),而求测试数据量T很大。
- 然后求找了下,发现可以预处理出所有的结果。然后直接进行O(1)的查询即可
- 也是先求出phi,然后看成 j=i*k,那么ans[j] += (phi(k)*i+phi(i)*k)即枚举最大公约数。
感觉有点卡时间,但题挺不错的- hhh-2016/05/31 22:19:58
- */
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- #include <algorithm>
- #include <functional>
- typedef long long ll;
- using namespace std;
- const int maxn = 5000050;
- const ll mod = 1e9+7;
- ll tans[maxn];
- ll phi[maxn];
- void read(int &ans){
- char last=' ',ch=getchar();
- while(ch<'0' || ch>'9')last=ch,ch=getchar();
- while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();
- if(last=='-')ans=-ans;
- }
- void Init()
- {
- for(int i=1;i<maxn;i++) phi[i]=i;
- for(int i=2;i<maxn;i++)
- if(phi[i]==i)
- for(int j=i;j<maxn;j+=i)
- phi[j]=phi[j]/i*(i-1);
- //欧拉函数
- for(int i = 2;i < maxn;i++)
- tans[i] = phi[i];
- for(int i = 2;i*i<= (maxn-50);i++)
- {
- tans[i*i] += phi[i] * i;
- for(int k = i+1;k*i< maxn; k++) // j = i*k
- {
- tans[k*i] += (k*phi[i] + i*phi[k]);
- }
- }
- for(int i = 1;i < maxn;i++)
- tans[i] += tans[i-1];
- }
- int main()
- {
- Init();
- int T,n;
- T = 0;
- read(T);
- while(T--)
- {
- n = 0;
- read(n);
- printf("%I64d\n",tans[n]);
- }
- return 0;
- }
51 nod 1188 最大公约数之和 V2的更多相关文章
- 1188 最大公约数之和 V2
1188 最大公约数之和 V2 题目来源: UVA 基准时间限制:2 秒 空间限制:262144 KB 给出一个数N,输出小于等于N的所有数,两两之间的最大公约数之和. 相当于计算这段程 ...
- 51nod - 1188 - 最大公约数之和 V2 - 数论
https://www.51nod.com/Challenge/Problem.html#!#problemId=1188 求\(\sum\limits_{i=1}^{n-1}\sum\limits_ ...
- 51nod 1188 最大公约数之和 V2
第二个\( O(T\sqrt(n)) \)复杂度T了..T了..T了...天地良心,这能差多少?! 于是跑去现算(. \[ \sum_{i=1}^{n-1}\sum_{j=i+1}^{n}gcd(i, ...
- 51nod1188 最大公约数之和 V2
考虑每一个数对于答案的贡献.复杂度是O(nlogn)的.因为1/1+1/2+1/3+1/4......是logn级别的 //gcd(i,j)=2=>gcd(i/2,j/2)=1=>phi( ...
- [51nod1188]最大公约数之和 V2(筛法)
题面 传送门 题解 口胡的整除分块单次询问\(O(\sqrt{n})\)的做法居然\(T\)了?那还是好好看正解吧-- 首先我们枚举\(j\),求对于每个\(j\)有所有\(i<j\)的\(\g ...
- 51 NOD 1244 莫比乌斯函数之和(杜教筛)
1244 莫比乌斯函数之和 基准时间限制:3 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens) ...
- 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 ...
- 51 nod 1405 树的距离之和
1405 树的距离之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之 ...
- 51 nod 1427 文明 (并查集 + 树的直径)
1427 文明 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 安德鲁在玩一个叫“文明”的游戏.大妈正在帮助他. 这个游 ...
随机推荐
- PTA題目的處理(一)
**題目1:A乘B** **實驗代碼** #include <stdio.h> #include <stdlib.h> int main() { signed int a,b; ...
- Linux kernel 的 sendfile 是如何提高性能的
Linux kernel 的 sendfile 是如何提高性能的 现在流行的 web 服务器里面都提供 sendfile 选项用来提高服务器性能,那到底 sendfile 是什么,怎么影响性能的呢? ...
- CocoaPods 基础知识--------安装 及 使用第三方库
极客学院:http://www.jikexueyuan.com/course/2665_2.html?ss=1
- NetFPGA-1G-CML Demo --- reference_router_nf1_cml
环境 deepin 15.4 vivado 15.2 ise 14.6 前期准备 Github Wiki链接:https://github.com/NetFPGA/NetFPGA-public/wik ...
- 浏览器关闭后,Session会话结束了么?
今天想和大家分享一个关于Session的话题: 当浏览器关闭时,Session就被销毁了? 我们知道Session是JSP的九大内置对象(也叫隐含对象)中的一个,它的作用是可以保 存当前用户的状态信息 ...
- java从网络中下载图片到本地
public class imageDownload { public static void main(String[] args) { String url = "http://loca ...
- PostMan 调用WCF Rest服务
问题描述: 现在有已有的WCF服务,但是ajax是不能请求到这个服务的: 需要把WCF转成WCF REST 的风格. 以下是从WCF转 WCF REST的步骤 1.首先在接口定义的地方加上 请求 We ...
- Vue filter介绍及详细使用
Vue filter介绍及其使用 VueJs 提供了强大的过滤器API,能够对数据进行各种过滤处理,返回需要的结果. Vue.js自带了一些默认过滤器例如: capitalize 首字母大写 uppe ...
- 用js 获取url 参数 页面跳转 ? 后的参数
记得之前在原来的公司写过这个东西,但是还是忘记怎么接住参数了,只知道怎么把id传过去! 问了身边的大佬 他首先推荐了我一个链接是别人写好的方法 附上链接地址:http://blog.csdn.net/ ...
- python 模块部分补充知识
一.hashlib hashlib 模块主要用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法. 实例 ...