我正在尝试编写这个使用循环的程序,它找到了使用Mersenne的Brute Force Prime Nu床。方向如下。
素数是一个不能被任何其他数字整除的数字(除了,通常为1)。确定数字是否是素数的所有已知方法都依赖于强力,即对可能性的详尽测试。编写一个检查数字是否为素数的例程。检查它是否均匀,如果没有,检查所有奇数到数字的平方根(你明白为什么平方根足够吗?)。如果数字不是素数,请告诉用户一个因素。
对于你的演示,你将使用Mersenne 67,它是2到67次幂减1(见问题1-4-A):147573952589676412927 [147,573,952,589,676,412,927]。 1644年,马林·梅森(Marin Mersenne)推测这个数字是素数。直到1903年F.N.科尔解决了这个猜想,他在美国数学学会的会议上得到了起立鼓掌。决议是什么? (即Mersenne 67 prime?)使用您的程序回答这个问题;你的程序可能会运行大约2.5分钟,这是它最初用来解决问题的两个半世纪的进步。
这就是我到目前为止所做的,但它似乎没有在我可以验证我的答案的地方运行。任何投入都会非常感激。提前谢谢。
def me():
N = int(input("What is the Value of N?="))
Mersenne=(2**N)-1
print(format(Mersenne,',d'))
me()
如何在上面包含上面的Merseene代码?
'''
This function takes a single argument n and returns either
1) a factor of n if n is not prime
2) False if n is prime
'''
def is_prime(n):
# "Check if it's even..."
if is_even(n):
# (do something)
else:
# "... and if not, check all the odd numbers up to the square root of the number"
for f in <something that generates odd numbers>:
if is_factor(f,n):
# (do something)
# Default case:
# n is odd, and
# none of the odd numbers up to sqrt(n) are factors of n
# (do something)
def get_n():
n = raw_input("What is the value of n? ")
return ((2 ** 67)-1) if n == 'm' else int(n)
n = get_n()
p = is_prime(n)
if p:
print("%d is not prime (e.g. factor=%d)" % (n, p))
else:
print("%d is prime")
答案 0 :(得分:0)
首先,您需要将问题分解为多个部分,即启动它,要求您的程序能够确定数字是否均匀。这个片段的确如此:
def isEven(input):
return input % 2 == 0
这个函数的作用是将输入模2以安全地确定它是否是偶数。
>>> isEven(10)
True
>>> isEven(9)
False
>>> isEven(144)
True
>>> isEven(67890)
True
>>> isEven(67891)
False
希望这能让你走上正轨:)
答案 1 :(得分:0)
这里有一些可能有或没有帮助的伪代码
'''
This function takes a single argument n and returns either
1) a factor of n if n is not prime
2) False if n is prime
'''
def is_prime(n):
# "Check if it's even..."
if is_even(n):
# (do something)
else:
# "... and if not, check all the odd numbers up to the square root of the number"
for f in <something that generates odd numbers>:
if is_factor(f,n):
# (do something)
# Default case:
# n is odd, and
# none of the odd numbers up to sqrt(n) are factors of n
# (do something)
def get_n():
n = raw_input("What is the value of n? ")
return ((2 ** 67)-1) if n == 'm' else int(n)
n = get_n()
p = is_prime(n)
if p:
print("%d is not prime (e.g. factor=%d)" % (n, p))
else:
print("%d is prime")
请注意is_even
和is_factor
不是真正的函数,您必须自己实现它们或将它们更改为等效的操作。此外,<something that generates odd numbers>
也不是真的,同样的事情。
此外,get_n()
是一个小函数,它会提示用户输入一个整数并返回它。如果用户输入m
(单个小写字符),则返回Mersenne 67(=(2 ^ 67) - 1)