我对Mathematica很新,我试图找到只能使用数字0,1,2和3编写的大素数,这些数字中有一半以上必须为0.例如,100003符合条件.
如果使用"If"语句,我正在考虑使用Prime [n]函数,但我想知道是否有更有效的方法来解决这个问题.提前致谢.
如果有一个好的答案,可以在http://mathematica.stackexchange.com上提出这个问题
有关各种答案,请继续阅读......
功能
myTestQ[num_Integer] := And[DigitCount[num][[10]] > Plus @@ DigitCount[num][[1 ;; 3]], PrimeQ[num]]
True
当它传递一个整数时返回,其中(i)具有0
比1
s,2
s和3
s 更多的数字,并且(ii)是素数. And
按顺序和短路评估其参数,因此应避免测试数字计数不正确的数字的素数.
在实践中,你的计算时间将由素性测试主导; 使用错误的数字计数生成和丢弃大量的整数是足够便宜的,你可以忽略程序中那部分的低效率.
现在测试一组仅由0,1,2,3
数字组成的整数.有一整个整数族只使用那些数字,即用base-4写的所有整数.所以让我们生成:
IntegerString[Range[lo, hi, 2], 4]
这将生成表示从lo
-th到hi
-th的所有base-4整数的字符串,步长为2(您不会对任何偶数编号感兴趣).例如
IntegerString[Range[1, 13, 2], 4]
产生
{"1", "3", "11", "13", "21", "23", "31"}
也就是说,字符串形式的第1,第3,第5,......,第13个base-4数字.当然,你需要它们作为整数来测试它们,我们将用ToExpression
它.
将它们混合在一起就可以得到类似的东西
Select[ToExpression[IntegerString[Range[lo, hi, 2], 4]], myTestQ]
替换lo
和hi
任何你喜欢的,但确保lo
是一个奇数.