基本上,標題說明了一切。數字不是太大(N的最大值是〜2/3 * max(long),最大值M是max(long)),所以我認爲即使是我現在擁有的簡單解決方案也足夠了。 M是永遠比N.更大找到大於N的第一個與M相關的素數
我目前有:
- 最簡單的,剛開始從N + 1,執行普通歐幾里德GCD,如果返回1,我們都做了,如果不是遞增,再試一次。
我想知道這種解決方案最糟糕的情況是什麼。性能不是一個大問題,但我仍然覺得必須有更好的方法。
謝謝。
關於最壞的情況下,我做了一個小測試:
Random r = new Random();
while (true)
{
long num = (long) r.Next();
num *= r.Next();
f((long)(num * 0.61), num);
}
...
public static int max;
public static int f(long N, long M)
{
int iter = 0;
while (GCD(N++, M) != 1)
{
iter++;
}
if (iter > max)
{
max = iter;
Console.WriteLine(max);
}
return 0;
}
它運行約30分鐘,在最壞的情況下至今29次迭代。所以我相信O(N)有更準確的答案。