小于等于N的所有整数与N关于gcd(i,N)的那些事

相关问题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啦

于是问题变的非常简单

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)的那些事

时间: 2024-08-30 01:07:30

小于等于N的所有整数与N关于gcd(i,N)的那些事的相关文章

小于等于N的全部整数与N关于gcd(i,N)的那些事

相关问题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))肯

编写一个js函数,该函数有一个n(数字类型),其返回值是一个数组,该数组内是n个随机且不重复的整数,且整数取值范围是[2,32]

今天在公众号里边看到这个问题,就自己写了下,发现自己还是有许多没注意到的,在此记录, //返回一个随机整数 function getRandom( min , max ){ var rand = Math.round( Math.random() * (max - min) + min ); return rand; }; //重复性验证 function isRepeat(arr,n){ if (arr.indexOf(n) > -1) { return true; }; return fal

HLSL学习笔记(一):基础

http://www.cnblogs.com/rainstorm/archive/2013/05/04/3057444.html 前言 五一在家无事,于是学习了一下HLSL,基于XAN4.0的.学习完了也就总结一下,纯粹是新手学习的经验之谈,纰漏之处还望见谅,不喜勿喷. HLSL是一种使用GPU渲染出图像的技术,不仅可以改变最终呈现的颜色,还可以物体的大小.胖瘦和位置等.例如物体的碎裂效果就可以使用HLSL来渲染得到. 数据类型 数据类型有值类型.向量.矩阵.采样器.和结构体. 1.值类型 bo

关于图像高速缩放算法,目前看到的最好的最清晰的一篇文章

http://www.myexception.cn/image/1630385.html 关于图像快速缩放算法,目前看到的最好的最清晰的一篇文章 昨天开始写一个录制屏幕和声音存储为视频文件的程序,差不多完成了. 屏幕录制使用方法:抓屏(方法很多,BitBlt.DirectX.MirrorDriver等),缩放,X264压缩(开源的,自己封装) 声音录制使用方法:声卡采集PCM数据,AAC压缩(开源的,自己封装) 最后打包复用为MP4文件,可以使用ffmpeg或者mp4v2等. 经过断断续续一天的

爱根,你消失一天,我如坠深渊!!!模块讲解,苑之恨!!!

time模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串:(1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"type(time.time())",返回的是float类型. (2)格式化的时间字符串(Format String): '1988-03-16'. (3)元组(struct_time) :struct_time元组共有9个元素共九个元素:

java中的小数的四舍五入取整的几种函数

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

高级着色语言简介

HLSL中提供的true和false关键字与C++相同. int:32位有符号整数 half:16位浮点数 float:32位浮点数 double:64位浮点数 float2 float3 float4 分别为 2D 3D 4D向量. 复合分量:(以下为复制操作)不一定要复制每个分量,可以只复制x.y分量. float4 u = {1.0f, 2.0f, 3.0f, 4.0f}; float4 v = {0.0f, 0.0f, 5.0f, 6.0f}; v = u.wyyx; // v = {4

BestCoder Round #27

Jump and Jump... Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 0    Accepted Submission(s): 0 Problem Description There are n kids and they want to know who can jump the farthest. For each ki

JavaScript数据类型转换方法汇总

转换为布尔型 用两次非运算(!):天台县羿壮冶金 1 !!5 ==> true 用布尔型的构造函数: 1 new Boolean(5) == > true 值转换为布尔类型为false:0,+0,-0,NaN,""(空字符串),undefined,null 除上面的值其他值在转换以后为true,需要特别提到的是:"0",new Object(),function(){} 转换为字符串类型 加上空字符串"": 1 123 + "