是否有一个简单的pari / gp程序,该程序可以筛选形式为k * n + c(其中n和c固定)的数字,直到某个素数p和k被限制在某个范围内(又名for(k = 1,10000,)?
伪代码:
n = (some number);
c = (some number);
T=[all k values];
forprime(p=2,100000000, for(i=1,#List if((T[i]*n+c)%p==0, (remove the number T[i] from the list)
换句话说,从整数T的列表开始 测试素数范围p中的第一个素数,并从列表T中删除整数k,以使k * n + c可被p整除。然后测试下一个素数,依此类推。这样做直到达到筛分的极限 返回或打印候选人列表。 感谢您的帮助!
答案 0 :(得分:0)
您提供的伪代码似乎是合理的。与其从列表中删除,不如直接复制它,可能会更容易且有效。使用函数select
保留应保留而不是删除的那些元素。
一些实际代码:
sieve(n,c,plimit,L)={forprime(p=2, plimit, L=select(t->(t*n+c)%p, L); if(!#L, break)); L}
sieve(8, 3, 70000, [1..10000])
我还在循环中添加了一个检查,如果列表为空,则退出循环。在我尝试过的情况下,这似乎发生了。