如何创建最紧凑的映射 n → isprime(n) 达到极限 N?
Posted
技术标签:
【中文标题】如何创建最紧凑的映射 n → isprime(n) 达到极限 N?【英文标题】:How to create the most compact mapping n → isprime(n) up to a limit N? 【发布时间】:2010-12-20 13:25:02 【问题描述】:当然,对于bool isprime(number)
,我可以查询一个数据结构。
我定义了最佳算法,该算法在 (1, N] 范围内生成内存消耗最低的数据结构,其中 N 是一个常数。
只是我正在寻找的一个例子:我可以用一位来表示每个奇数,例如对于给定的数字范围 (1, 10],从 3 开始:1110
下面的字典可以多挤一点吧?我可以通过一些工作消除五的倍数,但是以 1、3、7 或 9 结尾的数字必须存在于位数组中。
我该如何解决这个问题?
【问题讨论】:
您的要求有点模糊。您给出一个测试单个数字的签名,但随后要求提供 (1,N] 的数据结构。您想要一个生成字典这是最快的方法:
def divisors(integer):
result = []
i = 2
j = integer/2
while(i <= j):
if integer % i == 0:
result.append(i)
if i != integer//i:
result.append(integer//i)
i += 1
j = integer//i
if len(result) > 0:
return sorted(result)
else:
return f"integer is prime"
【讨论】:
【参考方案2】:当我必须进行快速验证时,我根据低于输入平方根的数字之间的基本除法编写了这个简单的代码。
def isprime(n):
if n%2==0:
return n==2
else:
cota = int(n**0.5)+1
for ind in range(3,2,cota):
if n%ind==0:
print(ind)
return False
is_one = n==1
return True != is_one
isprime(22783)
最后一个True != n==1
是为了避开n=1
的情况。
【讨论】:
【参考方案3】:素数第一法则:如果除以 2 等于整数或整数 不,它不是素数。
使用任何计算机语言的最快知道方法是使用字符串而不是数学进行类型匹配。匹配字符串浮点数中的 DOT。
除以 2,,, n = n / 2 将此转换为字符串,,, n = string(n) 如果“。”旅店: printf "是的,我是 Prime !"【讨论】:
“素数的第一条规则”是如果任何个大于一的整数整除它,那么它就不是素数。仅使用 2 进行测试是不够的。将数字转换为字符串以测试它是否为整数可能是您可以合理提出的最慢的方法。以上是关于如何创建最紧凑的映射 n → isprime(n) 达到极限 N?的主要内容,如果未能解决你的问题,请参考以下文章