P1390 公约数的和

题目描述

有一天,TIBBAR和LXL比赛谁先算出1~N这N个数中每任意两个不同的数的最大公约数的和。LXL还在敲一个复杂而冗长的程序,争取能在100s内出解。而TIBBAR则直接想1s秒过而获得完胜,请你帮他完成这个任务。

输入输出格式

输入格式:

共一行,一个正整数N。

输出格式:

共一行,一个数,为1~N这N个数中每任意两个不同的数的最大公约数的和。

输入输出样例

输入样例#1:

  1. 10
输出样例#1:

  1. 67

说明

对于40%的数据,2≤N≤2000.

对于100%的数据,2≤N≤2000000.

这个题怪好

不妨设f(n) = (1,n) + (2,n) + (3,n) + (4,n) + ... + (n-2,n) + (n-1,n)

则答案为f(2) + f(3) + f(4) + ... + f(n - 1) + f(n)

对于任意数i,若(i, n) = k,  则(i/k, n/k) = 1,不难得到

f(n) = Σ(i | n)phi(n/i) * i

对于每个i,枚举其倍数n即可

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <algorithm>
  6. #include <vector>
  7. #include <queue>
  8. inline void read(long long &x){x = ;char ch = getchar();char c = ch;while(ch > '' || ch < '')c = ch, ch = getchar();while(ch >= '' && ch <= '')x = x * + ch - '', ch = getchar();}
  9. inline int max(int a, int b){return a > b ? a : b;}
  10. inline int min(int a, int b){return a < b ? a : b;}
  11. inline void swap(int &a, int &b){int tmp = a;a = b;b = tmp;}
  12.  
  13. const int INF = 0x3f3f3f3f;
  14. const int MAXN = + ;
  15.  
  16. long long n;
  17. long long ans;
  18.  
  19. long long prime[MAXN],phi[MAXN],cnt;
  20. bool bp[MAXN];
  21.  
  22. inline void makephi()
  23. {
  24. phi[] = ;
  25. for(register long long i = ;i <= n;++ i)
  26. {
  27. if(!bp[i])
  28. prime[++cnt] = i, phi[i] = i - ;
  29.  
  30. for(register long long j = ;j <= cnt;++ j)
  31. {
  32. if(i * prime[j] > n)break;
  33. bp[i* prime[j]] = ;
  34. if(i % prime[j] == )
  35. {
  36. phi[i * prime[j]] = phi[i] * prime[j];
  37. break;
  38. }
  39. else
  40. phi[i * prime[j]] = phi[i] * (prime[j] - );
  41. }
  42. }
  43. }
  44.  
  45. long long f[MAXN];
  46.  
  47. int main()
  48. {
  49. read(n);
  50. makephi();
  51. for(register int i = ;i <= n;i ++)
  52. {
  53. for(register int j = i * ;j <= n;j += i)
  54. {
  55. f[j] += phi[j / i] * i;
  56. }
  57. }
  58. for(register int i = ;i <= n;++ i)
  59. ans += f[i];
  60. printf("%lld", ans);
  61. return ;
  62. }

洛谷P1390 公约数的和 [2017年6月计划 数论12]的更多相关文章

  1. 洛谷P1573 栈的操作 [2017年6月计划 数论11]

    P1573 栈的操作 题目描述 现在有四个栈,其中前三个为空,第四个栈从栈顶到栈底分别为1,2,3,…,n.每一个栈只支持一种操作:弹出并 压入.它指的是把其中一个栈A的栈顶元素x弹出,并马上压入任意 ...

  2. 洛谷P2429 制杖题 [2017年6月计划 数论10]

    P2429 制杖题 题目描述 求不大于 m 的. 质因数集与给定质数集有交集的自然数之和. 输入输出格式 输入格式: 第一行二个整数 n,m. 第二行 n 个整数,表示质数集内的元素 p[i]. 输出 ...

  3. 洛谷P1147 连续自然数和 [2017年6月计划 数论01]

    P1147 连续自然数和 题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以 ...

  4. 洛谷P1164 小A点菜 [2017年4月计划 动态规划08]

    P1164 小A点菜 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过u ...

  5. 洛谷P1244 [NOI2000] 青蛙过河 [2017年4月计划 动态规划07]

    P1244 青蛙过河 题目描述 有一条河,左边一个石墩(A区)上有编号为1,2,3,4,…,n的n只青蛙,河中有k个荷叶(C区),还有h个石墩(D区),右边有一个石墩(B区),如下图所示.n只青蛙要过 ...

  6. 洛谷P1877 [HAOI2012]音量调节 [2017年4月计划 动态规划05]

    P1877 [HAOI2012]音量调节 题目描述 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都需要改变一次音量.在演出开始之前,他已经做好一个列表,里面 ...

  7. 洛谷P2347 砝码称重 [2017年4月计划 动态规划01]

    P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...

  8. [洛谷P1390]公约数的和·莫比乌斯反演

    公约数的和 传送门 分析 这道题很显然答案为 \[Ans=\sum_{i=1}^n\sum_{j=i+1}^n (i,j)\] //其中\((i,j)\)意味\(gcd(i,j)\) 这样做起来很烦, ...

  9. 洛谷 - P1390 - 公约数的和 - 莫比乌斯反演 - 欧拉函数

    https://www.luogu.org/problemnew/show/P1390 求 $\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} gcd(i,j) $ ...

随机推荐

  1. mybtais分批insert

    这里自己写了个对集合按一批的数量进行分批操作的分页bean,见PagenationUtil如下: package com.util; import java.util.List ; /** * @au ...

  2. 08_jQuery对象初识(四)each循环、data(非常重要)

    each: 不使用for循环答应jQuery对象,使用each: 退出整个each循环: 退出一次each循环: data:

  3. <数据库>MySQL补充( 查询)

    show create table 表名 \G;(查看创建的属性) alter table 表名 auto_increment=xx;(修改自增起始值) set session auto_increm ...

  4. 【LGP4389】付公主的背包

    题目 退役前抄一道生成函数快乐一下 就是让我们做一个完全背包,但是朴素的做法显然是\(O(nm)\)的 把每一个物品搞成一个多项式,显然这个多项式所有\(v_i\)的倍数箱为\(1\),剩下的为\(0 ...

  5. svn插件的所有链接

    http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240

  6. 2019-5-21-dotnet-core-使用-CoreRT-将程序编译为-Native-程序

    title author date CreateTime categories dotnet core 使用 CoreRT 将程序编译为 Native 程序 lindexi 2019-05-21 11 ...

  7. [编织消息框架][netty源码分析]11 ByteBuf 实现类UnpooledHeapByteBuf职责与实现

    每种ByteBuf都有相应的分配器ByteBufAllocator,类似工厂模式.我们先学习UnpooledHeapByteBuf与其对应的分配器UnpooledByteBufAllocator 如何 ...

  8. js匿名函数与闭包作用

    http://www.jb51.net/article/79238.htm 1 闭包允许内层函数引用父函数中的变量,但是该变量是最终值 当mouseover事件调用监听函数时,首先在匿名函数( fun ...

  9. PHP+Ajax点击加载更多内容 -这个效果好,速度快,只能点击更多加载,不能滚动自动加载

    这个效果好,速度快,只能点击更多加载,不能滚动自动加载 一.HTML部分 <div id="more"> <div class="single_item ...

  10. python 获取公网 ip

    from urllib2 import urlopen my_ip = urlopen('http://ip.42.pl/raw').read() print 'ip.42.pl', my_ip fr ...