安全知识网 导航

求一个数的质因子python

24-05-10来源:本站编辑

丰色 发自 凹非寺

量子位 | 公众号 QbitAI

不到一个月的时间,陶哲轩又一篇论文上线:

这次是关于欧拉函数的单调非递减序列,他通过初等论证证明了一个名为M(x)函数的渐近式。

(即随着x增大,M(x)的行为趋势)

该函数在他之前的一篇博客中有所提及,大意是指一系列从1到x的数字中,满足欧拉φ函数是非递减的最长子序列的长度。

毫不意外,这篇论文的出产过程中也用到了AI。

不过,这次陶哲轩承认:

AI工具对他的核心研究并不那么有用(但他也表示可能是不想打破一些已有习惯去尝试)

对他帮助最大的其实是编码和生成论文中的流程图初稿

对于前者,陶哲轩已多次提及。

GPT可以让我不用去管计算任务中究竟用的是何种语言(Python还是SAGE、regex等),几乎只需用自然语言向它提出请求,它就能为我输出合格的代码(尽管我还得再编译一下)

这真的开始改变我的工作流程。

过去由于我害怕困难,一直避免使用代码密集型的任务解决问题;现在,这种情况正在消失,我发现我变得愿意在日常工作中做一些编码。

那么,就来简单看看这次的论文究竟说了什么。

准备长脑子了咳咳。

欧拉函数的单调非递减序列

该论文研究主要涉及函数M(x), 它定义的是数字1到x的最长子序列的长度,在这个子序列中,欧拉函数ψ是非递减的。

(欧拉函数ψ(n)通常用于表示小于或等于n的正整数中与n互质的正整数的数量)

由于M的前几个值是:

1, 2, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 11, 12, 12, …

所以,举个例子:

M(6)就等于5

因为欧拉函数在集合{1,2,3,4,5}或{1,2,3,4,6}上是非递减的,在{1,2,3,4,5,6}上不是。

而由于对于任何素数p,ψ(p)=p-1,我们有M(x)≥π(x)。

其中π(x)是素数计数函数(用于表示小于或等于x的正整数中的素数的数量)

根据经验,这些素数非常接近M(x)的最大长度;Pollack, Pomerance和Treviño已通过数值计算推测出下式

中的x=10⁷ 。

相比之下,以前最著名的上限基本上是以下形式:

对于该式子,在显式常数C=0.81781中,x→∞。

而将该结果与上面的结果相结合,陶哲轩就得到了渐近式

所以在特殊情况下

它既回答了Erdős的问题,也回答了与Pollack, Pomerance和Treviño所密切相关的问题。

陶哲轩介绍,该证明所用方法大多数都很基础(解决数论中最先进结果所需的只是带有经典误差项的素数定理)

基本思想是隔离给定数字1≤n≤x中的一个关键素因子p,因为它对欧拉函数有相当大的影响。

例如,对于“典型”数字n,可以因式分解为:

其中p2是中等大小的素数,p1是明显更大的那个,d则是一个所有素数因子均小于p2的数。这可得出:

因此,如果我们暂时保持d固定,并将n定位到相对较短的区间,那么ψ只能在n中是非递减的——如果p2也同时非递减。

事实证明,特别是在p2很大的情况下,这个方式显著减少了该机制中非递减序列的可能长度。

这个过程可以形式化,达成方式是通过将p的范围划分为各种子区间并检查它 (以及ψ上的单调性假设)如何约束与每个子区间相关联的n值。

而当p2很小时,我们使用因式分解:

其中d非常“平滑”(即没有大素数因子),而p是大素数。我们得到近似值:

并得出结论:为了使ψ不变小,约等式右边的分数基本上必须是分段常数。

再进行一番更仔细的分析之后,我们就能证明初步不等式,最终对于所有正有理数q得到主要定理:

陶哲轩表示,这其实是一个“小奇迹”,与以下事实有关:

公式(4)中分母的大质因数最低项必然等于d的最大质因数,这使得我们能够非常准确地得出公式(5)的左边,从而轻松构建整个公式(5)。

在论文的最后一部分,陶哲轩还讨论了强猜想(1)的一些近似反例,这些例子表明,如果不假设一些“相当强的假设”,可能很难接近证明此猜想。

论文地址:

https://arxiv.org/abs/2309.02325

参考链接:

[1]https://mathstodon.xyz/@tao/111018835694062000

[2]https://terrytao.wordpress.com/2023/09/06/monotone-non-decreasing-sequences-of-the-euler-totient-function/

— 完 —

量子位 QbitAI · 头条号签约

","gnid":"9b6b848e2160b21fa","img_data":[{"flag":2,"img":[{"desc":"","height":"341","title":"","url":"https://p0.ssl.img.360kuai.com/t018a2ad4d053c68b86.jpg","width":"1080"},{"desc":"","height":"526","title":"","url":"https://p0.ssl.img.360kuai.com/t01837e3fd4fd8005a8.jpg","width":"1080"},{"desc":"","height":"720","title":"","url":"https://p0.ssl.img.360kuai.com/t01da12707969a75c63.jpg","width":"1080"},{"desc":"","height":"857","title":"","url":"https://p0.ssl.img.360kuai.com/t01f288ae3bf42d84d5.jpg","width":"1080"},{"desc":"","height":"94","title":"","url":"https://p0.ssl.img.360kuai.com/t0140fe059b32233a23.jpg","width":"606"},{"desc":"","height":"102","title":"","url":"https://p0.ssl.img.360kuai.com/t0152dcabb913cc9f0b.jpg","width":"942"},{"desc":"","height":"124","title":"","url":"https://p0.ssl.img.360kuai.com/t01a3d30ef5ce3415db.jpg","width":"908"},{"desc":"","height":"112","title":"","url":"https://p0.ssl.img.360kuai.com/t01c19e5c1647c64084.jpg","width":"728"},{"desc":"","height":"82","title":"","url":"https://p0.ssl.img.360kuai.com/t01f20ce5ab1e26ad33.jpg","width":"442"},{"desc":"","height":"256","title":"","url":"https://p0.ssl.img.360kuai.com/t0110c791d38e7859f8.jpg","width":"1400"},{"desc":"","height":"106","title":"","url":"https://p0.ssl.img.360kuai.com/t0121d2029abfa98e1f.jpg","width":"776"},{"desc":"","height":"316","title":"","url":"https://p0.ssl.img.360kuai.com/t012fc04c2af49d010a.jpg","width":"1168"},{"desc":"","height":"856","title":"","url":"https://p0.ssl.img.360kuai.com/t019f9c699a39027fc6.jpg","width":"896"}]}],"original":0,"pat":"art_src_3,fts0,sts0","powerby":"pika","pub_time":1694322240000,"pure":"","rawurl":"http://zm.news.so.com/59e303395e597c474ea46c0a6282647f","redirect":0,"rptid":"7990eb4891a92649","rss_ext":[],"s":"t","src":"量子位","tag":[],"title":"陶哲轩发新论文了,又是AI帮忙的那种 [翟郭15815854431]
Python求2 - n之间的素数 编写一个质因分解的程序 -
…… 乐奋4505 1 2 3 4 5 6 7 8 9 10 n=12 k =2 temp=[] whilek <=n: ifn %k ==0: n =n /k temp.append(k) else: k +=1 print(temp)

[翟郭15815854431]
python3环境下,对一个整数分解质因数,这么写哪里有错误?求解 -
…… 乐奋4505 少个else:num1 = int(input("请输入要分解的正整数:")) temp = [] if num1 == 1: print("无法分解质因素") else: k = 2 while k if num1 % k == 0: num1 = num1 / k temp.append(k) else: k += 1 print(temp)

[翟郭15815854431]
输入一个数,求其因子的程序代码? -
…… 乐奋4505 假如整数n除以m,结果是无余数的整数,那么我们称 m就是 n的因子. 需要注意的是,唯有被除数,除数,商皆为整数,余数为零时,此关系才成立.反过来说,我们称 n为 m的 倍数. 更具这个概念.. 写成程序不难啊.思路如下: 1.要求输入一个数,用一个变量保存 2.按照因素的判断.得出结果,用一个变量保存 3.输出那个结果变量

[翟郭15815854431]
编写函数,求一个给定整数的所有质因子,急用啊!答好了给加分那! -
…… 乐奋4505 编写函数,求一个给定整数的所有质因子,急用啊!答好了给加分那! 编写函数的,谢谢大哥大姐 回答: 你的这个函数估计难度太高了,这10分铁定贡献给系统了 如果你限定这个整数范围在10万以下的话,或许还能简单点 求一个给定整数的所有质因子,这涉及到大数分解这个数论里面的基础问题, 而这个问题至今没有理想回答,如果给定整数比较小,可以通过程序计算给出 这个我能做,如果给定整数比较大,即使是专家也是无能为力的.

[翟郭15815854431]
c语言编程:求一个数的质因子 -
…… 乐奋4505 #include<stdio.h>int main(){ int i,j=0,x; printf("请输入一个整数:"); scanf("%d",&x); printf("该数的质因子为:"); for(i=2;i<=x;i++)//此循环用来寻找因子 { if(x%i==0) { for(j=2;j<i;j++)//此循环用来把因子中是质数的数筛选出来 { if(i%j==0) break; else continue; } if(j==i) printf("%d ",i); } else continue; } printf("\n"); return 0;}

[翟郭15815854431]
求一个数的因子源代码 -
…… 乐奋4505 回答你的补充问题:首先你要搞清楚n的作用,它是用标记能被j整除的数组k[]的下标,所以每检验一个数字n都需要恢复到原来的值-1. 如果放在int i,j,n,s; 这样的话它在程序中只运行一次(因为在for循环体外面,for循环体里面的要运行997次,...

[翟郭15815854431]
求2~100中每个数的质因子,输出如下形式:2=2;3=3;4=2*2......100=2*2*5*5
…… 乐奋4505 pascal 版本的... Var a, b: Array[1..100] OF Longint; k, temp, i, j, n, t, l: longint; Function check(i: Longint): Boolean; Var j: longint; Begin check := true; for j:=2 To i-1 DO if i mod j = 0 Then Begin check := false; Exit; End; End; begin For i:=2 TO ...

[翟郭15815854431]
求质因数的代码,求解释 -
…… 乐奋4505 == ,条件判断符号 ,两边相等则返回 ture ,不等返回falseif (n % factor == 0) 如果n除以factor的余数等于0 则执行以下代码++,自加 factor++ 将factor加1,再赋值给factor . 假如fator=4,执行后factor=5 while (n > 1) ;如果n>1,则循环执行括号...

[翟郭15815854431]
程序编写一个函数,求2到1000的质因子之和 -
…… 乐奋4505 #include<stdio.h>//求一个数的质因数之和 int calc(int num){ int sum=0,i=2; while (num>1) { if (num%i==0) { sum+=i; num/=i; }else{ i++; } } return sum; } void main(){ int i,sum=0; for(i=2;i<=1000;i++){ sum+=calc(i); } printf("2到1000的质因数之和是:%d",sum); }

[翟郭15815854431]
pascal求数的质因子 -
…… 乐奋4505 我的程序比楼上的更清晰易懂,因为质数除了2以外,其他都是奇数,所以我的程序运行速度也比楼上的程序要快一倍.program zhiyinzi_Hewr; const maxn=100; var n:longint; procedure print(x:longint); var i:longint; first:boolean; begin write(x,'='); ...

首页
返回顶部
联系电邮:
安全知识网