我有一个练习,需要找到一个程序,你应该找到N!除以N ^ 2
1≤N≤10^ 9
我想通过简单的方法来创建阶乘函数并将其除以N的幂,但显然它不会起作用。
只需算法或伪代码即可
答案 0 :(得分:3)
对于任何n > 4
,如果n
是prime
,则n!
不能被n^2
整除。
这是支持我的论点的简单解释:
n!
除以n
后,我们在分子中留下(n-1)!
,需要除以n
。因此,我们需要n
或分子中n
的倍数,以便(n-1)!
可以被n
整除,当n
为n
时,这种情况永远不会发生素数。
虽然O(sqrt(N))
是非素数,但上述情况总会发生。通过深入了解数论
希望它有所帮助!!!
编辑:以上是一个简单的Python代码。复杂性为def checkPrime(n):
i = 2
while i<n**(1/2.0):
if n%i == 0:
return "Yes" # non-prime, so it's divisible
i = i + 1
return "No" # prime, so not divisible
def main():
n = int(raw_input())
if n==1:
print "Yes"
elif n==4:
print "No"
else:
print checkPrime(n)
main()
:
7
<强>输入:强>
No
<强>输出:强>
=VALUE(2/2)
答案 1 :(得分:1)
这与Wilson's Theorem比http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/file/transform/LineTokenizer.html更容易相关,{{3}}表示数字n > 1
当且仅当
(n-1)! = -1 (mod n)
这在代数上等同于当{且仅当
时n>1
是素数
n! = -n (mod n^2)
此外,众所周知并且很容易证明(引用维基百科的文章)
唯一的例外是4,其中3! =6≡2(mod 4),如果n是 复合然后(n - 1)!与0(mod n)一致。
因此除了4的唯一例外,如果n
是复合的,(n-1)! = 0 (mod n)
因此n! = 0 (mod n^2)
,如果n
是素数,n! = -n = n^2-n (mod n^2)
因此{{1}在这种情况下,{}不与n!
一致。
如果要显示素数0
,n
在n!
除以n^2-n
时,需要威尔逊定理的全部功效。对于这个问题,你需要知道的是它不是零。
在任何情况下,您都可以编写一个运行素性检查的程序,尽管这是否被认为是有效的解决方案取决于是谁分配了问题。