相关问题1: 求小于等于N的与N互质的数的和。即∑ i (gcd(i,N)=1, N>=i>0)

依据N的规模能够有非常多种方法。这里我介绍一个比較经典的方法

先说下这个结论:假设 gcd(n,i)=1则 gcd(n,n-i)=1 (1<=i<=n)

 这个很好理解吧,对于随意两个数a,b a%s==0,b%s==0(a>b)

那么(a-b)%s肯定也是零。

所以呢 gcd(n,i)==1则gcd(n,n-i)必须也为1 假设为s(s!=1)

那么gcd(n,n-(n-i))肯定也不是1啦

 于是问题变的很easy

 ANS=N*phi(N)/2

 i,n-i总是成对出现,而且和是n

 以下的说明能够让你消除反复的疑虑

 由于:

 n=2*i->i=n/2

 1.假设n是奇数。那么n!=2*i,自然也不存在n-i=i和反复计算之说

 2.假设n是偶数,n=2*i成立,gcd(n,n/2)必定为n的一个因子,这个因子为1当且仅当n==2

 于是对于n>2的偶数,绝对不存在gcd(n,n/2)=1所以更别说什么反复计算了

 对于n==2

 ans=2*1/2=1

 正好也满足

 所以得到终于公式:

 ans=N*phi(N)/2

相关问题2:求gcd(i,N)的和,即∑gcd(i,N) ,(N>=i>0)

最直观的方法就是求N次gcd加起来,呵呵我开个玩笑的,N略微大一点就没实用了。以下说说正规的解法吧

设函数g(n) = gcd(i,n) (1<=i<=n),对于随意给定的i 。

g(1) = 1 ,g(n)=g(m1)*g(m2) (n=m1*m2 且 (m1, m2)= 1)。由积性函数定义,g是积性函数。由详细数学上的结论,积性函数的和也是积性的。

所以f(n) = ∑gcd(i, n)也是积性函数。n>1时n能够被唯一分解
n=p1^a1*p2^a2*...*ps^as,因为f(n)是积所以f(n) = f(p1^a1)*f(p2^a2)*...f(pr^ar)。

所以仅仅要求f(pi^ai)就好,假设d是n的一个约数。那么1<=i<=n中gcd(i,n) = d的个数是phi(n/d),即n/d的欧拉函数

f(pi^ai) =  Φ(pi^ai)+pi*Φ(pi^(ai-1))+pi^2*Φ(pi^(ai-2))+...+pi^(ai-1)* Φ(pi)+ pi^ai *Φ(1)

= pi^(ai-1)*(pi-1) + pi*pi^(ai-2)*(pi-1)....+pi^ai

=  pi^ai*(1+ai*(1-1/pi))

接下来把各个项乘起来OK

相关问题3:求1到N的全部和N互质的数的乘积对N取模

有这种结论,对于1,2,4,答案为N-1,其余的4的倍数答案为1。质数答案为N-1,其余的若为偶数则除以2后再推断素因子的个数,奇数则直接推断,多余一个素因子答案为1。仅仅有一个素因子答案为N-1; 同样的素因子不反复计数。

小于等于N的全部整数与N关于gcd(i,N)的那些事的更多相关文章

  1. 用二进制方法求两个整数的最大公约数(GCD)

    二进制GCD算法基本原理是: 先用移位的方式对两个数除2,直到两个数不同时为偶数.然后将剩下的偶数(如果有的话)做同样的操作,这样做的原因是如果u和v中u为偶数,v为奇数,则有gcd(u,v)=gcd ...

  2. JS 随机整数

    <script>   function GetRandomNum(Min,Max){   var Range = Max - Min;   var Rand = Math.random() ...

  3. Math.random取随机整数

    Math.random可以随机获取0-1的数字,今天用的需要给id随机赋值,小数不好控制,就只取整. 网上很多是 int i=(int)(Math.random()*100): 报错: 后找到 var ...

  4. Shell系列(27)- 条件判断之两个整数比较

    两个整数之间比较 Liunx中,都是字符型,但是加了数值比较的选项,所以自动将他们转换成了整数型进行比较,不需要对这些参数进行变量转换或者重新声明 测试选项 作用 整数1 -eq 整数2 判断整数1是 ...

  5. oracle常用函数及示例

    学习oracle也有一段时间了,发现oracle中的函数好多,对于做后台的程序猿来说,大把大把的时间还要学习很多其他的新东西,再把这些函数也都记住是不太现实的,所以总结了一下oracle中的一些常用函 ...

  6. 《明解c语言》已看完,练习代码此奉上

    2016年9月20日至2016年11月12日,从学校图书馆借来的<明解c语言>看完了. 大三第一个学期,前8周,有c语言程序设计的课.课本是学校里的老师编写出版的,为了压缩空间,减少页面, ...

  7. [转]SQL 常用函数及示例

    原文地址:http://www.cnblogs.com/canyangfeixue/archive/2013/07/21/3203588.html --SQL 基础-->常用函数 --===== ...

  8. java中的小数的取整的几种函数

    Math类中提供了5个与取整相关的函数,如下所示: static double ceil(double a):天花板函数,返回大于等于a的最小整数(但是以浮点数形式存储). static double ...

  9. Oracle常用函数

    前一段时间学习Oracle 时做的学习笔记,整理了一下,下面是分享的Oracle常用函数的部分笔记,以后还会分享其他部分的笔记,请大家批评指正. 1.Oracle 数据库中的to_date()函数的使 ...

随机推荐

  1. centos7最小化安装图形界面

    1.安装X Window System命令 yum groupinstall "X Window System" 选择y直接安装就可以了 2.安装图形界面软件 GNOME yum ...

  2. koa,express,node 通用方法连接MySQL

    这个教程不管node,express,koa都可以用下面方法连接,这里用koa做个参考 这个教程的源码地址: https://github.com/xiaqijian/... 新建文件目录,我是这样子 ...

  3. 2019-03-28 SQL Server Table

    -- table 是实际表 view是虚表.你可以认为view是一个查询的结果 -- 声明@tbBonds table declare @tbBonds table(TrustBondId int n ...

  4. ucore_lab0

    一直想好好学习一下操作系统课程,去一个Mooc网站上找了一门操作系统的课程.这便是里面的配套实验. 实验指导:点这里 lab0主要是准备相关的操作环境.课程推荐使用qemu作为硬件模拟器,推荐运行环境 ...

  5. FastDFS 工具类实现文件上传_02

    一.jar 包 jar包下载:https://pan.baidu.com/s/1nwkAHU5 密码:tlv6 或者 下载工程,安装到 maven 本地仓库 工程下载:https://pan.baid ...

  6. 2015 Multi-University Training Contest 4 hdu 5334 Virtual Participation

    Virtual Participation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  7. Maven多模块项目搭建

    最近一直在思考如何能够更好的重用代码.减少重复劳动,之前有一篇文章通过导入JAR包的形式,可以重用部分形如util类的方法,但是这样的话,管理起来jar包,特别是协同工作,多项目情况下,管理JAR会出 ...

  8. MVC传递数据-传递对象或对象集合

    前言 本文主要介绍从View(或者js)文件向Controller提交对象或者对象集合.比方.将表格中的一行数据作为一个对象提交.或将多行数据作为一个集合提交到Controller. 回想 从View ...

  9. 取消记录tableView选中效果

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self. ...

  10. 基础数位DP小结

    HDU 3555 Bomb dp[i][0] 表示含 i 位数的方案总和. sp[i][0] 表示对于位数为len 的 num 在区间[ 10^(i-1) , num/(10^(len-i)) ] 内 ...