您好我在找到此算法的运行时间时遇到以下假设:s = O(logN)且Random_Integer的运行时间是恒定时间:
1 express N-1 as 2^t * u where u is odd:
2 for i <-- to s do
3 a <-- Random_Integer(2, N-2);
4 if EuclidGCD(a, N) not equal to 1 then
5 return false;
6 x sub 0 <-- a^u mod N;
7 for j <-- 1 to t do
8 x sub j <-- x^2 sub j-1 mod N;
9 if x sub j = 1 and x sub j-1 not equal to 1 and x sub j-1 not equal to N -1 then
10 return false;
11 if x sub t not equal to one then
12 return false;
13 return true;
从内循环开始,指数模态运算需要n ^ 3次,循环运行n次迭代,总计n ^ 4。然后我的方式到外部循环,我们有另一个指数模态操作,再次n ^ 3时间,然后EuclidGCD也需要n ^ 3时间。最后,outter循环也运行n次迭代。我相信这些值是正确的,但我对如何获得总运行时间感到困惑。我也很困惑,如果这两个嵌套的循环运行时间应该相乘,并且如果外循环中的ExtendedEuclid方法调用应该与outter循环的运行时间相乘。我希望这是明确的,谢谢你的任何帮助。
答案 0 :(得分:1)
内部循环是n ^ 4(外部循环中最慢的部分),并且对于外部循环的每次迭代运行一次,即EDIT:logn times,so n ^ 4logn。
...无论其
根据提前达到return false
的频率,在最坏的情况下可能只有n ^ 5,例如如果几乎所有的时间都在第一次迭代时返回false,那么你只花了n ^ 3-n ^ 4的工作,所以你的平均值为O(n ^ 3)或O(n ^ 4) (取决于它是return false
)。