我试着用MSE问题的Pari解释器检查这个Sage单元服务器中所述猜想的反例。
我在这里重现了猜想的陈述:如果N>8是偶数亏-完全数,Q=N/(2N-Sigma(N)),则Q是素数。
在这里,σ( N )是N的经典除数和。
我使用以下代码:
for(x=9, 1000, if(((Mod(x,(2*x - sigma(x))) == 0)) && ((fromdigits(Vecrev(digits(x / (2*x - sigma(x)))))) == (x / (2*x - sigma(x)))) && !(isprime((x / (2*x - sigma(x))))), print(x,factor(x))))但是,Sage Cell Server的Pari解释器不接受它,而是提供了以下错误消息:
*** at top-level: for(x=9,1000,if(((Mod(x,(2*x-sigma(x)))==0))&&
*** ^----------------------------
*** Mod: impossible inverse in %: 0.我做错了什么?
发布于 2022-03-06 23:47:00
下面是您算法的更好实现
{
forfactored(X = 9, 10^7,
my (s = sigma(X), t = 2*X[1] - s);
if (t <= 0, next);
my ([q, r] = divrem(X[1], t));
if (r == 0 && fromdigits(Vecrev(digits(q))) == q && !ispseudoprime(q),
print(X)))
}它更具可读性,但最重要的是,它避免了一次又一次地对同一个x进行分解:每次编写sigma(x)时,我们都需要考虑x (解释器不够聪明,无法计算一次子表达式)。实际上,它并不是通过使用forfactored来执行单一的因式分解,而是执行一个筛子(变量X包含[x, factor(x)])。在这个范围内,这大约比最初的实现快3倍。
我让它运行到10^9 (大约10分钟),没有更多的反例。
发布于 2022-02-01 11:54:56
我自己做的。
下面是我使用的代码:
for(x=9, 10000000, if((2*x > sigma(x)) && ((Mod(x,(2*x - sigma(x))) == 0)) && ((fromdigits(Vecrev(digits(x / (2*x - sigma(x)))))) == (x / (2*x - sigma(x)))) && !(isprime((x / (2*x - sigma(x))))), print(x,factor(x))))搜索返回奇怪的反例N= 9018009,这是预期的。
在指定的范围内,它没有返回任何偶数反例。
https://stackoverflow.com/questions/70939790
复制相似问题