gpt4 book ai didi

wolfram-mathematica - 在 Mathematica 中寻找大素数

转载 作者:行者123 更新时间:2023-12-04 08:14:39 28 4
gpt4 key购买 nike

我是 Mathematica 的新手,我试图找到可以仅使用数字 0、1、2 和 3 书写的大素数,并且这些数字的一半以上必须为 0。例如 100003 将符合条件。

我正在考虑将 Prime[n] 函数与一堆 if "If"语句一起使用,但我想知道是否有更有效的方法来解决这个问题。提前致谢。

最佳答案

要获得好的答案,请在 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 组成的整数范围数字。有一整套整数只使用这些数字,即所有以基数 4 编写的整数。所以让我们生成那些:
IntegerString[Range[lo, hi, 2], 4]

这将生成表示 lo 中所有基数为 4 的整数的字符串。 -th 到 hi -th 以 2 为步长(您不会对任何偶数感兴趣)。例如
IntegerString[Range[1, 13, 2], 4]

产生
{"1", "3", "11", "13", "21", "23", "31"}

即字符串形式的第 1、第 3、第 5、...、第 13 个基数为 4 的数字。当然,您需要将它们作为整数返回来测试它们,我们将使用 ToExpression为了那个原因。

把它们混合在一起,你会得到类似的东西
Select[ToExpression[IntegerString[Range[lo, hi, 2], 4]], myTestQ]

更换 lohi随心所欲,但要确保 lo是奇数。

关于wolfram-mathematica - 在 Mathematica 中寻找大素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34694432/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com