Description

  小菜的妹妹小诗就要读小学了!正所谓计算机要从娃娃抓起,小菜决定在幼儿园最后一段轻松的时间里教妹妹编程。
  小菜刚教完gcd即最大公约数以后,一知半解的妹妹写了如下一段代码:
   sum:=0;
   for i:=1 to n-1 do
   for j:=i+1 to n do sum:=sum+gcd(i,j)

  显然这个程序的效率是很低的,小明打算写一个更强的程序,在求出sum的同时比妹妹跑的更快。

Input

  第一行一个整数t,即表示有t组数据
  接下来t行,每行一个整数n

Output

  t行,每行一个整数,表示n所对应的sum值

Sample Input

2
10
100

Sample Output

67
13015

Data Constraint

Hint

【数据规模】
  20%数据t≤100,n≤100
  40%数据t≤1000,n≤2000
  100%数据t≤10000,n≤1000000

Solution

我们可以将答案转换先预处理出gcd(1~i-1,i)的答案,答案就是sum(ans[1~n]),再维护前缀和即可。如何求 gcd(1~i-1,i),我们可以所有的i一起求。即枚举k,表示gcd为d的两个数,再枚举倍数k,那么我们可以用来更新ans[d*k],即ans[d*k]+=gcd(1~d*k-1,d*k),将式子化简,可得,sum(gcd( 1~d*k-1 , d*k ))=sum(d* (gcd( 1~d*k-1 , d*k )=1的个数)  )= sum(d* phi(d*k) )。因此,我们只需要预处理出phi(1~n),然后枚举d*k<=n即可,时间复杂度O(n long n)。

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1000010
#define ll long long
using namespace std;
int n,t,ls,p[N],bz[N],f[N];
ll ans[N];
int main(){freopen("gcd.in","r",stdin);freopen("gcd.out","w",stdout);scanf("%d",&t);for(int i=2;i<=N-10;i++){if(!bz[i]) p[++p[0]]=i,f[i]=i-1;for(int j=1;j<=p[0];j++){if(p[j]*i>N-10) break;bz[p[j]*i]=1;f[p[j]*i]=f[i]*(i%p[j]==0?p[j]:p[j]-1);}}for(int i=1;i<=N-10;i++){ans[i]+=ans[i-1];for(int j=1;j<=(N-10)/i;j++){ans[i*j]+=(ll)i*f[j];}}while(t--){scanf("%d",&n);printf("%lld\n",ans[n]);}return 0;
}


作者:zsjzliziyang 
QQ:1634151125 
转载及修改请注明 
本文地址:https://blog.csdn.net/zsjzliziyang/article/details/93777442

1349. 最大公约数相关推荐

  1. LeetCode简单题之找出数组的最大公约数

    题目 给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数 . 两个数的 最大公约数 是能够被两个数整除的最大正整数. 示例 1: 输入:nums = [2,5,6,9,10] 输出: ...

  2. python最大公约数和最小公倍数的求法_最大公约数和最小公倍数的求法分析

    简介 求最大公约数和最小公倍数可能是编程中最常见的几个基本问题了.因为他们的基本概念基本上很早的时候就知道了,对他们的求法和他们之间的关系都比较有意思. 基本的数学性质 先从最大公约数这一部分开始吧. ...

  3. mysql err 1349_MySQL 视图 第1349号错误解决方法

    代码如下: CREATE OR REPLACE VIEW BLOG_V_ADMIN (ID,NICKNAME,SEX,EMAIL,PHONE,QQ,MSN,HTTP,REGISTER_TIME, IP ...

  4. java编写最大公约数_Java编写最大公约数和最小公倍数

    package javaapplication24; class NegativeIntegerException extends Exception{ String message; public ...

  5. 【蓝桥java】进制与整除之最大公约数 最小公倍数

    补充: (1)欧几里得定理(辗转相除法):A和B的最大公约数 = B和A%B 的最大公约数 (2)将两个数乘起来再除以最大公约数就是最小公倍数 package cn.zzunit.jnvi;/***寻 ...

  6. Console-算法[if,while]-一输入两个正整数m和n,求其最大公约数和最小公倍数

    ylbtech-Arithmetic:Console-算法[if,while]-一输入两个正整数m和n,求其最大公约数和最小公倍数 1.A,Demo(案例) 输入两个正整数m和n,求其最大公约数和最小 ...

  7. 最大公约数和最小公倍数的欧几里得算法

    最大公约数的算法竟然如此简单,不说了,见代码 #include <stdio.h> int gcd(int a, int b) { if(b== 0) return a; return g ...

  8. 素数、最大公约数、最下公倍数、质因数分解

    2013-08-18 11:20:43 素数.最大公约数.最下公倍数.质因数分解都是与素数相关的,解决了素数的问题,其他的都可以此为基础求解. 小结: 求1到n之间的素数的基本方法是通过遍历2到sqr ...

  9. 用欧几里得算法求最大公约数_欧几里得算法:GCD(最大公约数),用C ++和Java示例解释...

    用欧几里得算法求最大公约数 For this topic you must know about Greatest Common Divisor (GCD) and the MOD operation ...

最新文章

  1. Python机器学习实践指南pdf (中文版带书签)、原书代码、数据集
  2. pandas使用rename函数自定义重命名dataframe指定索引标签(位置)的名称(customize rename index value or label)
  3. Oracle 10g客户端的安装和配置
  4. vue.js指令v-model实现方法
  5. 将txt文件转换成xlsx文件及用matlab读取xlsx
  6. 升级npm之后,保存的位置仍然在C盘,不在自己规定的盘下
  7. Confluence 6 选项 1 – 在 Confluence 中手动重建用户和用户组
  8. fiddler https
  9. 电脑qq浏览器怎么滚动截长图_电脑怎么快速截图?
  10. js sdk demo java_微信JS-SDK DEMO页面和示例代码
  11. 数据分析系统的流程图及架构图
  12. 顺序表的基本操作(含全部代码c)
  13. 如何解决移动端 Retina 屏 1px 像素问题 ?
  14. css html文字淡入淡出,Css淡入淡出
  15. 行业分析-全球与中国船用废气解决方案市场现状及未来发展趋势
  16. Vlan总结(Chinaitlab教程)
  17. Unix操作系统设计第一章学习
  18. 【Python】Pandas、Numpy性能优化秘籍(全)
  19. 关于socket write error 和Software caused connection abort: recv failed 错误
  20. 他为何放弃工程局工作,也要转行学python,还拿下17.5K的offer

热门文章

  1. 分享几款好用的软件,建议低调收藏
  2. ICCV2021:Rethinking Coarse-to-Fine Approach in Single Image Deblurring
  3. qt 实现导航栏切换页面功能 QStackedLayout
  4. 免费SVN代码托管,不限私有,不限成员
  5. KeyError: 2
  6. 获取随机数字且不重复
  7. 【论文翻译】DANN的改进ADDA Multimodal Vigilance Estimation with Adversarial Domain Adaptation Networks
  8. 数值分析-有关迭代法
  9. 转 javascip学习笔记
  10. 7-16 约分最简分式