Блог пользователя savinov

Автор savinov, 14 лет назад, По-русски

Приветствую всех! На днях я решал задачу, в которой требовалось определить, представимо ли число N < 1015 в виде суммы двух квадратов. И у меня возникли проблемы с этим, банальный перебор за корень давал TL. Так же пробовал разложить на простые сомножители за тот же корень, и потом проверял четность степеней у простых делителей вида 4k + 3, опять же TL. Скорее всего задача сдается за корень, и мне интересно именно техническая реализация этого, т.е. как конкретно писать аккуратный перебор или факторизацию за корень, и в чем конкретно проявляется эта аккуратность. Если что, эта задача с тимуса link HERE Заранее благодарен!

  • Проголосовать: нравится
  • +7
  • Проголосовать: не нравится

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +13 Проголосовать: не нравится

Заводим 2 указателя i и j. Изначально i = 1, . На каждой итерации увеличиваем i на единицу, а j уменьшаем до тех пор, пока i2 + j2 > n. Когда-нибудь получится, что i2 + j2 = n. Либо не получится, если число непредставимо в виде суммы двух квадратов.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

How can you use an algorithm that checks N = a²+b² in the problem you linked? It asks for the minimum number of squares that sum to N, am I right?

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

according to me we can run a loop in which 'i' goes from 1 to sqrt(N/2) and if N-i*i is a perfect square we are done....

for(int i=1; i*i<=N/2; i++) { if((N-i*i) is a perfect square) done; }

its complexity is O(sqrt(N)).....

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

An arbitrary positive number n is expressible as the sum of two squares iff, given its prime factorization

n=p1^(a1)p2^(a2)p3^(a3)...pk^(ak),

none of pi^(ai) +1 is divisible by 4 (Conway and Guy 1996, p. 147). http://mathworld.wolfram.com/SquareNumber.html