- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我如何在 Python 中生成一个范围内的非素数随机数?
我对如何创建一个算法来产生特定范围内的非素数感到困惑。我是定义函数还是创建条件语句?我希望范围内的每个数字都具有相同的概率。例如,在 1 - 100 中,每个非素数不会有 1% 的机会,而是有 ~1.35% 的机会。
最佳答案
现在,您没有说任何关于效率的事情,这肯定可以优化,但这应该可以解决问题。这应该是一种用于测试素数的有效算法:
import random
def isPrime(n):
if n % 2 == 0 and n > 2:
return False
return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))
def randomNonPrime(rangeMin, rangeMax):
nonPrimes = filter(lambda n: not isPrime(n), xrange(rangeMin, rangeMax+1))
if not nonPrimes:
return None
return random.choice(nonPrimes)
minMax = (1000, 10000)
print randomNonPrime(*minMax)
返回范围内所有非素数的列表后,从非素数列表中选择一个随机值,使得选择范围内的任何非素数与范围内任何其他非素数的可能性一样.
编辑
虽然你没有问效率,但我很无聊,所以我想出了一个方法,使 (1000, 10000000)
的范围在我的上花费 6 秒多一点机器而不是超过一分半钟:
import numpy
import sympy
def randomNonPrime(rangeMin, rangeMax):
primesInRange = numpy.fromiter(
sympy.sieve.primerange(rangeMin, rangeMax),
dtype=numpy.uint32,
count=-1
)
numbersInRange = numpy.arange(rangeMin, rangeMax+1, dtype=numpy.uint32)
nonPrimes = numbersInRange[numpy.invert(numpy.in1d(numbersInRange, primesInRange))]
if not nonPrimes.size:
return None
return numpy.random.choice(nonPrimes)
minMax = (1000, 10000000)
print randomNonPrime(*minMax)
这使用了 SymPy symbolic mathematics library优化一个范围内素数的生成,然后使用NumPy过滤我们的输出并选择一个随机的非素数。
关于python - 在python中生成一个随机的非质数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38416864/
我知道这不是寻找素数的最佳方法,也不是最有效的方法;但是,我似乎无法找到 169 算作素数的原因(就我而言,对于较小的数字,它可以正常工作)。 public static int checkPrime
有人可以指导我获取素数吗?这是家庭作业,所以我不想要答案,但一些指示将不胜感激。这真的让我很烦:( 我想我很接近。但是我遇到的问题是数字 25 和 35。它们不是质数,但是这个函数正在返回它们 var
利用正则判别素数,来源于网络,神人! 复制代码 代码如下: Set regex = New RegExp regex.Pattern = "^1?$&b
质数又称素数。一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除的数;否则称为合数。根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑
我在 Ruby on Rails 中尝试如何找到质数。这是我的代码: 助手:app/helpers/test_helper.rb module TestHelper
lower = int(input("from:")) upper = int(input("to:")) for num in range(lower,upper + 1): if num >
最近我对 LINQ 很感兴趣。我正在尝试获取质数。我实际上做得很好,但我的代码没有显示低于 Sqrt(n) 的素数。 static void Main(string[] args) {
在尝试设计算法时,我偶然发现了这个问题。这不是家庭作业。 令 P_i = 前 i 个素数的数组。现在我需要最小的 i 这样 Sum 1 / (P_i[n]*P_i[n]) >= 1. (如果这样的
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周跟大家讲到小彭文章风格的问题,和一些朋友聊过以后,
我是新来的。我正在尝试解决此练习 Problem 18只是为了加强我的解决能力。我已经编码了答案。该任务要求“在 1,000,000 以下的质数中,有多少个数位之和等于两周中的天数?” (两周是 14
我是一名优秀的程序员,十分优秀!