【转AekdyCoin】求小于等于N的与N互质的数的和「建议收藏」

【转AekdyCoin】求小于等于N的与N互质的数的和「建议收藏」话说我以前求这样的问题都是先求与N不互质的数,把N分解质因数,然后用容斥原理,今天看了大牛的博客,顿时觉得弱爆了。。。以下内容转大牛文章:ifgcd(n,i)=1thengcd(n,n-i)=1(1反证法:如果存在K!=1使gcd(n,n-i)=k,那么(n-i)%k==0而n%k=0那么必须保证i%k=0k是n的因子,如果i%k=0那么gcd(n,i)=k

大家好,又见面了,我是你们的朋友全栈君。

话说我以前求这样的问题都是先求与N不互质的数,把N分解质因数,然后用容斥原理,今天看了大牛的博客,顿时觉得弱爆了。。。

以下内容转大牛文章:

if gcd(n,i)=1 then gcd(n,n-i)=1 (1<=i<=n)

反证法:
如果存在K!=1使gcd(n,n-i)=k,那么(n-i)%k==0
而n%k=0
那么必须保证i%k=0
k是n的因子,如果i%k=0那么gcd(n,i)=k,矛盾出现;
于是问题变的非常简单
ANS=N*phi(N)/2
i,n-i总是成对出现,并且和是n
于是可能就有人问了,如果存在n-i=i那不是重复计算?
答案是不会
因为:
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

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163380.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ue4 弱指针_智能指针如何实现自动释放

    ue4 弱指针_智能指针如何实现自动释放原创文章,转载请注明出处。UE4也有一套智能指针库,整理了一下做个介绍。也请大家做补充。共享指针/共享引用/弱指针/注意事项一.TSharePtr1.如何创建一个TSharePtr2.TSharePtr如何进行类型转换1)TSharePtr转TSharePtr2)ConstTSharePtr转TSharePtr3)TSharePtr转TShareRef3.使用注意事项1)TSharePtr2)类型转换二.TShareRef1.如何创建一个TShareRef2.TShareRef如何进行类型转换1)TS

    2022年10月4日
    2
  • 虚函数详解[通俗易懂]

    虚函数详解[通俗易懂]文章目录一、虚函数实例二、虚函数的实现(内存布局)1、无继承情况2、单继承情况(无虚函数覆盖)3、单继承情况(有虚函数覆盖)4、多重继承情况(无虚函数覆盖)5、多重继承情况(有虚函数覆盖)三、虚函数的相关问题1、构造函数为什么不能定义为虚函数2、析构函数为什么要定义为虚函数?3、如何去验证虚函数表的存在  面向对象的语言有三大特性:继承、封装、多态。虚函数作为多态的实现方式,重要性毋庸置疑。 …

    2022年7月26日
    11
  • 修改tomcat启动窗口名称_重启tomcat命令

    修改tomcat启动窗口名称_重启tomcat命令Tomcat bin目录下用startup.bat启动Tomcat ,启动窗口显示的Title 更改方法如下:1 在bin目录下找到catalina.bat ,用文本模式打开2 找到 if “%TITLE%” == “” set TITLE=Tomcat 这句3 把 set TITLE=Tomcat 更改为 set TITLE=(想使用的名称包括中文) 即可。如图:…

    2022年8月19日
    15
  • js给数组添加数据的方式/js 向数组对象中添加属性和属性值[通俗易懂]

    js给数组添加数据的方式/js 向数组对象中添加属性和属性值[通俗易懂]参考:https://www.cnblogs.com/ayaa/p/14732349.htmljs给数组添加数据的方式有以下几种:直接利用数组下标赋值来增加(数组的下标起始值是0)例,先存在一个有3个数据的数组:letarr=[1,2,3];console.log(arr);  此时输出的结果是[1,2,3]letarr=[1,2,3];arr[3]=5;console.log(arr);  此时的输出结果是[1,2,3,5];通过数组名[数组名.le.

    2022年6月11日
    238
  • XAMPP环境的搭建[通俗易懂]

    XAMPP环境的搭建[通俗易懂]XAMPP是一个强大的集成软件包(什么是集成软件包?就是多个软件打包一起安装了,比如office办公软件包括了word、Excel、PPT)XAMPP包括了Apache,MySQL,PHP,Perl

    2022年6月30日
    35
  • Android JSONArray转List

    Android JSONArray转ListList<bea>zjTvOrdersPlusOne=JSONArray.parseArray(zjTvStringWeeklyPlusOne,ZjTvOrder.class);//zjTvStringWeeklyPlusOne为JSON字符串

    2022年6月23日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号