找出N!除以n ^ 2

时间:2016-11-29 18:12:38

标签: algorithm

我有一个练习,需要找到一个程序,你应该找到N!除以N ^ 2  1≤N≤10^ 9
我想通过简单的方法来创建阶乘函数并将其除以N的幂,但显然它不会起作用。  只需算法或伪代码即可

2 个答案:

答案 0 :(得分:3)

对于任何n > 4,如果nprime,则n!不能被n^2整除。

这是支持我的论点的简单解释:

n!除以n后,我们在分子中留下(n-1)!,需要除以n。因此,我们需要n或分子中n的倍数,以便(n-1)!可以被n整除,当nn时,这种情况永远不会发生素数。

虽然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 Theoremhttp://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!一致。

如果要显示素数0nn!除以n^2-n时,需要威尔逊定理的全部功效。对于这个问题,你需要知道的是它不是零。

在任何情况下,您都可以编写一个运行素性检查的程序,尽管这是否被认为是有效的解决方案取决于是谁分配了问题。