기본적으로 제목은 모든 것을 말합니다. 숫자가 너무 크지 않습니다 (최대 N은 최대 2/3 * 최대 (긴)이고 최대 M은 최대 (긴)입니다), 그래서 나는 현재 가지고있는 간단한 해결책조차도 충분하다고 생각합니다. M은 N. 것보다 항상 더 큰M보다 큰 첫 번째 숫자 찾기 M
내가 현재 무엇을 가지고 :
- 대부분 단순, 그냥 1을 반환하는 경우 증가하지 않을 경우, 우리는, 완료 N + 1, 일반 유클리드 GCD을 수행 시작하고, 그리고 다시 시도하십시오.
이 솔루션의 최악의 시나리오는 무엇입니까? 성능은 큰 문제는 아니지만 더 나은 방법이 있어야하는 것처럼 느껴집니다.
감사합니다.
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)보다 더 정확한 대답이 있다고 믿습니다. 는