您好,我很难找到该算法的运行时间,假设 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 时间。最后,外循环也运行 n 次迭代。我相信这些值是正确的,但是我对如何获得总运行时间感到困惑。我也很困惑这两个嵌套循环的运行时间是否应该相乘,以及外部循环中对 ExtendedEuclid 的方法调用是否应该与外部循环的运行时间相乘。我希望这很清楚,感谢您的帮助。