考虑这个挑战:
给定两个数字
A
和B
,您可以选择B
个不同素数的方式,其中每个素数应小于或等于A
(<= A
)。由于数字可能很大,请提供你的答案mod 65537。
例如
如果A = 7
和B = 2
,那么:
所有素数<= A
均为{2, 3, 5, 7}
,答案为6
:{2, 3} {2, 5} {2, 7} {3, 5} {3, 7} {5, 7}
我创建了这个解决方案:
from math import factorial
from math import fmod
def nPk(n,k):
return int( factorial(n)/factorial(n- k))
def is_prime(a):
for i in range(2,a):
if a % i ==0:
return False
return True
def distinct_primes(A):
primes = []
for i in range(2,A):
if is_prime(i):
primes.append(i)
return len(primes)
def fct(A, B):
return nPk(distinct_primes(A),B)
#print fct(59,5)% 65537
print fmod(fct(69,8), 65537)
但是,我没有得到正确的答案!我在这里错过了什么?
答案 0 :(得分:1)
for i in range(2,A):
应该是
for i in range(2, A+1):
因为您必须考虑所有素数&lt; = A。
答案 1 :(得分:1)
Ionut关于包容性问题是正确的!
除此之外,您应该将nPk定义更改为:
def nPk(n,k):
return int( factorial(n)/(factorial(n- k) * factorial(k)))
答案 2 :(得分:0)
alfasin是正确的;问题是你选择素数的顺序无关紧要。因此,您希望使用组合而不是排列。