Как назначение класса, я должен написать программу на C, чтобы сгенерировать все пифагорейские троек ниже заданного значения 't'. Вот мой код, который сначала генерирует примитивный триплет (a, b, c) с использованием Euclid's Formula и печатает все триплеты формы (ka, kb, kc) для 1 < kc < t.Доказательство: Пифагорейский тройной алгоритм быстрее по формуле Евклида?
for (i = 2; i < (sqrt(t) + 1); i++)
for (j = 1; j < i; j++)
if ((gcd(i,j) == 1) && ((i-j) % 2) && ((i*i + j*j) < t))
{
k = 0;
a = i * i - j * j;
b = 2 * i * j;
c = i * i + j * j;
while ((++k) * c < t)
printf("(%d, %d, %d)\n", k*a, k*b, k*c);
}
Большинство других алгоритмов, которые я наткнулся на использование вложенных циклов, чтобы проверить сумму квадратов, и значительно медленнее, чем это, как т растет. Можно ли вывести доказательство, что оно действительно быстрее?
Да, речь идет о большой нотации O – aaronman
Знаки Big-O связаны только с * асимптотической * сложностью. На самом деле это не говорит вам, что будет работать быстрее на любом разумном размере, так как константа может сильно отличаться. – duskwuff
Если вам требуется подтверждение того, что этот код быстрее, чем какой-либо другой код, было бы полезно предоставить и другой код. –