整数因式计算器

  1. 阿尔珀特伦
  2. 程序
  3. 整数因式计算器
行动
功能

每行键入一个数值表达式或循环。例:x=3;x=n(x);c<=100;x‑1

这个Web应用程序使用两种快速算法来计算数字或数值表达式:椭圆曲线法(ECM)和自初始化二次筛(SIQS)。

该程序使用本地存储来记住分解的进度,因此您可以在几个会话中完成对大量数据的分解。你的计算机会记住因子分解的状态。你只需要重新加载这个页面。

因为所有的计算都是在你的计算机上进行的,所以你可以在分解过程中把它从因特网上断开。您甚至可以在第一次运行后启动此应用程序,而无需连接Internet。

源代码用C语言编写并编译成asm。js和WebAssembly,这是Web导航器使用的语言。后者速度更快,但并非所有Web浏览器都支持它。您可以在计算数字时查看版本。

有一个视频列表与这个计算器有关。

看到了吗因子分解记录对于此应用程序。

可以输入使用以下运算符、函数和圆括号的表达式:

  • +用于添加
  • -用于减法
  • *用于乘法
  • /对于整数除法
  • %对于模数(整数除法的余数)
  • ^或**表示求幂(指数必须大于或等于零)。
  • <,==,>;<=,>=, != 用于比较。运算符返回0表示false,返回-1表示true。
  • 答案:检索最后一个答案。
  • 以及,或者,异或,不是对于二进制逻辑。这些操作是用二进制(以2为基数)完成的。正(负)数的前面加上无限位数的位设置为零(一)。
  • <<:什么时候b0,b轮班左边指定的位数b。这相当于×2个b。否则,b轮班右指定的位数b相当于地板(/二b). 示例:5 SHL 3=40。
  • SHR公司>>:什么时候b0,SHR公司b轮班右指定的位数b相当于地板(/二b). 否则,SHR公司b轮班左边指定的位数b。这相当于×2个b。示例:-19 SHR 2=-5。
  • n!:阶乘(n必须大于或等于零)。示例:6!=6×5×4×3×2=720。
  • n!:多因子(n必须大于或等于零)。它是n时代nk时代n2千…(所有大于零的数字)其中k是感叹号的数目。示例:7!!=7×5×3×1=105。
  • p#:primorial(所有素数的乘积小于或等于p). 例:12#=11×7×5×3×2=2310。
  • B(n):以前的可能质数n。示例:B(24)=23。
  • F(n):斐波纳契数Fn从序列0、1、1、2、3、5、8、13、21等开始,其中每个元素等于序列前两个成员的和。例:F(7)=13。
  • L(n):L号卢卡斯n=Fn-1+Fn+1
  • N(N):之后的下一个可能的质数n。示例:N(24)=29。
  • P(n):不受限制的分区号(分解的数量n不考虑顺序的整数和)。例如:P(4)=5,因为数字4可以用5种不同的方式划分:4=3+1=2+2=2+1+1=1+1+1。
  • Gcd(米,n,…):这些整数的最大公约数。示例:GCD(12,16)=4。
  • Lcm(m,n,…):这些整数的最小公倍数。示例:LCM(12,16,24)=48。
  • 莫迪夫(m,n):反转n,仅在以下情况下有效n是互质的,意味着它们没有共同的因素。示例:Modinv(3,7)=5,因为3×51(型号7)
  • 模式功率(m,n,r):查找nr。示例:Modpow(3,4,7)=4,因为344(型号7)。
  • 总计(n):查找小于n相对来说n。例如:ToClient(6)=2,因为1和5与6没有公共因子。
  • 雅各比(m,n):获取的雅各比符号n。当第二个参数是质数时,当是的倍数n,如果有一个解决方案² (国防部n)它等于当上述同余没有解时。
  • 随机(m,n):介于n.
  • 绝对值(n):绝对值n.
  • IsPrime(n):返回零ifn不是可能素数,如果是,则为-1。示例:IsPrime(5)=-1。
  • 平方英尺(n):参数平方根的整数部分。
  • Iroot(n,r):第一个参数的整数r根。例如:Iroot(8,3)=2。
  • 数量(n):不同质因子的数目n。例如:NumFact(28)=2,因为它的素数因子是2和7。
  • 最小值(n):最小质因数n。例如:MinFact(28)=2,因为它的素数因子是2和7。
  • 最大值(n):最大质因数n。例如:MaxFact(28)=7,因为它的素数因子是2和7。
  • 数字(n):的正除数n。例如:NumDivs(28)=6,因为28的除数是1、2、4、7、14和28。
  • 萨姆迪夫(n):的所有正因子之和n。示例:SumDivs(28)=56,因为1+2+4+7+14+28=56。
  • 数字(n,r):位数n在底部r。示例:NumDigits(13,2)=4,因为二进制(以2为基数)中的13表示为1101。
  • sumdights(n,r):数字之和n在底部r。例如:SumDigits(213,10)=6,因为十进制表示的位数总和为2+1+3=6。
  • 转数(n,r):查找通过向后写入n在底部r。示例:RevDigits(213,10)=312。
  • 混凝土(m,n):连接n根据如下表所示:
Concat功能模式
模式因素顺序重复因素例子
0提升浓度(0,36)=23
1下降浓度(1,36)=32
2提升是的浓度(2,36)=2233
下降是的浓度(3,36)=3322

你可以用前缀0倍对于十六进制数,例如0x38等于56。

符号k(国防部n)意味着k通过n等于除法的余数通过n.号码n叫做模数。

此方法计算椭圆曲线中的点,这些点由以下公式表示:是的² ³ ++b(国防部n)在哪里n是要计算的数字。

在下一张图中,您可以看到这些点(,是的)为了什么是的² ³+4+7(mod29)保持。由于计算使用模运算(在本例中使用除以29的余数),属于椭圆曲线的点不能表示为连续线。如果操作是实数执行的话,情况就是这样。

除了上面显示的点之外,我们使用另一个点,称为O,或无穷远点。

用复杂的公式,我们可以定义一个点的和。就这样一点(,是的)属于上述曲线的可以是其他点(x)的和1,y1)和(x)2,y2)也属于曲线。

我们可以加一点(,是的)对自己好几次,得到一个新的点(4,是的4)是的倍数(,是的).

当模是质数时,4³+27b² 0(模式p)不正确,属于椭圆曲线的点(包括点O)形成一个称为群的数学结构。分组顺序是点数。在图中我们可以看到31个点,所以组顺序是32。因为O+O=O,如果我们用群阶的倍数乘以任何一个点,我们就得到了点O。

尽管群阶的值很难找到,但可以证明它接近于用作模的素数。通过改变曲线,我们得到了一个不同的群,它的阶数也发生了变化。

计算一个数n,我们必须找到对应于n.

对于每一条椭圆曲线,我们试图从一个随机点开始寻找无穷远点(,是的)属于随机椭圆曲线是的² ³ ++b(国防部n). 由于求解一个复合数的二次或三次方程非常困难,所以最好选择,是的,和我们可以很容易地计算b是的² ³ (国防部n)

在第一步中,算法将点乘以小于B1的界的不同素数的幂。当计算坐标之间的最大公约数时如果群阶的所有素数因子都小于B1,则可以得到所要搜索的素数。

利用第一步的结果,第二步得到该点的倍数,直到上限B2,然后我们将该步骤中找到的所有点的坐标x相乘。最后,我们计算乘积和要因子数之间的最大公约数。在这种情况下,如果群阶的所有素因子(除一个外)都小于B1且群阶的最大素数小于B2,则可以得到我们正在搜索的素数。

如果最大公约数等于1,我们必须通过改变起始点来尝试使用不同的曲线(,是的)参数呢,计算新参数b从公式中。

程序使用了许多超出本帮助范围的优化来解释它们。

执行时间取决于第二大素数因子的大小和计算机的速度。

B1的最优值与期望曲线
数字B1值预期曲线
15200025
201100090
2550000300
30250000700
35100万1800
40300万5100
451100万10600
504300万19300
551.1亿49000
602.6亿124000
658.5亿210000
702900亿340000

程序运行25条极限B1=2000的曲线,300条极限B1=50000的曲线,1675条极限B1=1000000的曲线,最后使用极限B1=11000000的曲线,直到找到所有的系数。

ECM分解算法可以很容易地在多台机器上并行化。为了做到这一点,在第一台计算机上从曲线1运行因子分解,在第二台计算机从曲线10000运行它,在第三台计算机从曲线20000运行,依此类推。要在进行因式分解时更改曲线编号,请按名为更多,在新窗口的输入框中键入此数字,然后按新曲线按钮。

当其中一台计算机发现新的系数时,您应该在其他计算机中输入该系数,方法是在右下角的输入框中键入该系数,然后按enter键(或单击因素按钮)。

符号k(国防部n)意味着k通过n等于除法的余数通过n.号码n叫做模数。

N是要计算的数字。这个数字一定不是完美幂。如果我们找到两个整数是的就这样² 是的²(modN)以及是的(国防部N),然后是gcd(+是的,N)将揭示出N.

为了找到这些值是的,该方法查找具有以下形式的关系t² 美国(国防部N)在哪里美国是小素数的乘积。这些素数的集合就是因子基。这些关系将通过筛分来发现,这不在本文介绍的范围之内。

找到的关系用乘法组合起来。左边永远是正方形,因为它是正方形的乘积,所以目标是在右边有一个正方形。当一个数的所有素数都出现偶数次时,它就是一个正方形。

例如:将要考虑的数字设为N=1817,我们发现了与因子基={2,7,13}之间的关系:

45平方米24×7个0×13个1

123平方米210×7个0×13个1

由于13的指数不是偶数,这两种关系都有非平方的RHS。但是乘以它们我们得到:

84平方米214×13平方米

84平方米(二)7×13)平方米

从2开始7×13个我们得到因子gcd(84+16641817)=23。

在RHS中,哪些关系必须相乘才能找到一个平方,这是一个线性代数问题,它是用矩阵来解决的。

这种方法的主要问题是,当我们增加被分解的数量时,很难找到关系,所以我们需要对这种方法进行改进。

大素数siq使用大素数和因子基。最大素数的大小取决于要计算的数,但通常它比因子基的最大元素大大约50到100倍。

偏关系是一个恒等式:LHS是平方,RHS是因子基的素数乘以大素数的乘积。如果我们得到两个共享同一大素数的偏关系,我们可以把它们合并成一个完全关系。这使得我们找到关系的速度是非大素数变化的两倍。

例如,我们选择N=1817,假设我们发现了以下偏关系,其中67是一个大素数:

71平方米3×7×67

116平方米11×67个

为了将这些部分关系合并为一个完整关系,我们将它们相乘,然后除以大素数的平方:

(71×116/67)平方米3×7×11

367平方米3×7×11

模块划分需要扩展的GCD计算。

当要分解的数字在31到95位数的范围内时,在计算一些曲线以找到小因子后,程序将切换到SIQ(如果小程序下面的复选框启用它),当数字有两个大素数因子时,这是一种比ECM快得多的算法。由于此方法需要大量计算机内存来存储关系,因此如果重新启动小程序,则因子分解将从头开始。要使用SIQ立即开始因子分解,可以在“新曲线”框中输入0。

切换到SIQ的阈值
数字31-55岁56-60岁61-65岁66-70岁71-75岁76-80岁81-85年86-90岁91-95年
曲线101522263550100150200

当因子分解没有进行时,您可以通过按Config按钮来更改此应用程序的设置。将弹出一个新窗口,您可以在其中选择不同的设置:

  • 每组位数:为了提高可读性,大数字之间用空格隔开,形成固定数量的数字组。使用此输入框,您可以确定组中的位数。
  • 详细模式:显示有关找到的因子的更多信息。
  • 漂亮的印花:如果设置了此复选框,则指数以上标形式显示,乘法符号为“×”。应用程序还显示超过30位数的数字的位数。如果未设置该复选框,则指数前面有求幂符号“^”,乘法用星号表示。此外,位数永远不会显示。这种模式便于将结果复制到其他数学程序中。
  • 十六进制输出:如果设置了此复选框,则数字将以十六进制格式显示,而不是常用的十进制表示法。要以十六进制格式输入数字,需要在数字前面加上字符串0x。例如,0x38=56。程序以等宽字体显示十六进制数字。
  • 在服务器上使用坎宁安表:选中时,如果要计算的数字的形式为ab±1,应用程序将尝试从Web服务器检索已知因子。为了减少数据库,只包含至少14位的因子,因此应用程序会找到小因子。这些因素来自乔纳森·克罗比名单它包含了2674850个坎宁安数因子。

配置保存在设备中,因此当您再次启动Web浏览器时,所有设置都保持不变。

每行写一个表达式,然后按相应的按钮。输出将放在下面的窗格中。

空白行或注释行(以数字“#”字符开头)将复制到下窗格中。

表达式循环:使用以下语法,您可以只键入一行来计算或确定几个数字的素数。必须键入用分号分隔的四到五个表达式:

  • 第一个表达式:它必须以字符串“x=”开头,并设置x的第一个值。
  • 第二个表达式:它必须以字符串“x=”开头,并设置下一个值x。
  • 第三个表达式:它持有结束表达式条件。如果它等于零(表示false),则循环结束,否则循环继续。
  • 第四个表达式:它保存要分解的表达式。
  • 可选的第五个表达式:如果此表达式与零(表示真)不同,则显示或计算第四个表达式,如果为零(表示false),则忽略第四个表达式。

除第一个表达式外,所有其他表达式都必须包含变量和/或柜台c.

如果在处理1000个数字后结束表达式为false,则会出现“继续”按钮。按此按钮将使程序处理下一个1000个数字,依此类推。

例1:求奇数素数减一的前100个数的因子。要键入的行是:x=3;x=n(x);c<=100;x-1型.

例2:找出小于10000的史密斯数。根据维基百科的说法,史密斯数是一个复合数,在给定的基数(默认以10为基数)中,其位数之和等于其素因式分解中的位数之和。要键入的行是:x=1;x=x+1;x<10000;十;sumdigits(x,10)==sumdigits(concatfact(2,x),10)而不是isprime(x).

您可以从github。请注意,源代码是用C语言编写的,您需要象形文字环境来生成JavaScript。

作者:达里奥·阿尔彭。最后更新日期:2022年12月4日。