Порахуйте суми в дві площі


45

Враховуючи негативне число n, виведіть кількість способів виразити nяк суму двох квадратів цілих чисел n == a^2 + b^2( OEIS A004018 ). Слід зазначити , що aі bможе бути позитивним, негативним або нульовим, а їх порядок має значення. Виграє найменше байт.

Наприклад, n=25дає, 12тому що 25може бути виражена як

(5)^2  + (0)^2
(4)^2  + (3)^2
(3)^2  + (4)^2
(0)^2  + (5)^2
(-3)^2 + (4)^2
(-4)^2 + (3)^2
(-5)^2 + (0)^2
(-4)^2 + (-3)^2
(-3)^2 + (-4)^2
(0)^2  + (-5)^2
(3)^2  + (-4)^2
(4)^2  + (-3)^2

Ось значення до n=25. Будьте уважні, що працює ваш код n=0.

0 1
1 4
2 4
3 0
4 4
5 8
6 0
7 0
8 4
9 4
10 8
11 0
12 0
13 8
14 0
15 0
16 4
17 8
18 4
19 0
20 8
21 0
22 0
23 0
24 0
25 12

Ось значення до n=100списку.

[1, 4, 4, 0, 4, 8, 0, 0, 4, 4, 8, 0, 0, 8, 0, 0, 4, 8, 4, 0, 8, 0, 0, 0, 0, 12, 8, 0, 0, 8, 0, 0, 4, 0, 8, 0, 4, 8, 0, 0, 8, 8, 0, 0, 0, 8, 0, 0, 0, 4, 12, 0, 8, 8, 0, 0, 0, 0, 8, 0, 0, 8, 0, 0, 4, 16, 0, 0, 8, 0, 0, 0, 4, 8, 8, 0, 0, 0, 0, 0, 8, 4, 8, 0, 0, 16, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 8, 4, 0, 12]

Факти веселощів: Послідовність містить умови, які довільно високі, а межа її середньої ходової кількості - π.

Табло:


4
Чекати, що?? "Послідовність містить умови, які довільно високі, а межа її середньої ходової кількості - π."
Стюі Гріффін

@StewieGriffin Два твердження послідовні. Розглянемо послідовність 1,0,2,0,0,3,0,0,0,4,0,0,0,0,5,.... Відсікаючи послідовність після будь-якого ненульового числа, середнє значення дорівнює 1. І прогони 0 мають менший і менший вплив пізніше в послідовності.
xnor

5
Я знаю, що це послідовно .. =) Я перевірив 10 000 перших номерів, коли розмістив коментар. Що я не отримую: Чому на землі це дорівнює Пі?
Стюі Гріффін

29
@StewieGriffin Сума доданків до N відповідає точкам (a, b) з ^ 2 + b ^ 2 <= N. Це точки решітки в колі радіуса sqrt (N), площа якого πN.
xnor

2
@xnor і там йде магія :(
Андрас Дек

Відповіді:


19

Пітон ( 59 57 56 байт)

lambda n:0**n+sum((-(n%(x-~x)<1))**x*4for x in range(n))

Демонстрація в Інтернеті

Як і в моїй відповіді CJam, і тут використовується інверсія Мебіуса і працює в псевдоквазілінеарний час.

Завдяки Sp3000 за 2 байт економії та feersum за 1.


1
Ці дужки дратують.
lirtosiast

@ThomasKwa, розкажи мені про це. Те, що мене справді здивувало, в одній з версій, яку я пройшов на шляху до першої, яку я розмістив, - це -1**xбуло завжди -1. Я очікував, що -1це буде один цілий буквальний маркер, а не одинарний мінус з низьким пріоритетом, а за ним один.
Пітер Тейлор

2
З повагою! Ваш код коротший за все, що я придумав. Ваше рішення ґрунтується на абсолютно новій і несподіваній математичній ідеї, і мені приносить радість, що це можливо навіть у такому прямолінійному виклику. Результат зворотного Мобіуса досить гарний, і я отримав задоволення отримати доказ для себе.
xnor

1 байт можна зберегти, перемістивши множення на 4, після **x.
feersum

@PeterTaylor Чи можете ви пояснити, як працює ваш алгоритм / чи можете ви вказати мені ресурс? Я не можу зрозуміти, як можна застосувати інверсію möbius до кількох сум задачі.
недолік

15

Математика, 13 байт

Якщо вбудовані дозволені, це робити, як це зробити в Mathematica.

2~SquaresR~#&

При 0 <= n <= 100

2~SquaresR~# & /@ Range[0, 100]

{1, 4, 4, 0, 4, 8, 0, 0, 4, 4, 8, 0, 0, 8, 0, 0, 4, 8, 4, 0, 8, 0, 0, 0, 0 , 12, 8, 0, 0, 8, 0, 0, 4, 0, 8, 0, 4, 8, 0, 0, 8, 8, 0, 0, 0, 8, 0, 0, 0, 4 , 12, 0, 8, 8, 0, 0, 0, 0, 8, 0, 0, 8, 0, 0, 4, 16, 0, 0, 8, 0, 0, 0, 4, 8, 8 , 0, 0, 0, 0, 0, 8, 4, 8, 0, 0, 16, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 8, 4, 0 , 12}


1
Тому що, звичайно, математика має для цього вбудований.
HyperNeutrino

14

Python 2, 44 байти

f=lambda n,x=1:+(x>n)or(n%x<1)-f(n,x+2)/4<<2

Це майже те саме, що рішення xsot (засноване на рішенні Пітера Тейлора ), але зберігає 8 байт, спрощуючи спосіб обробки знаків.

Зауважте, що для повноцінної програми ми можемо зберегти 2 байти у функції, не несучи витрат поза функцією:

f=lambda n,x=1:x>n or(n%x<1)-f(n,x+2)/4<<2
print+f(input())

Два додаткові байти для повної програми таким чином:

n=input()
f=lambda x:x>n or(n%x<1)-f(x+2)/4<<2
print+f(1)

Адже n > 0існує дуже розбірливий 40-байтний варіант:

f=lambda n,x=1:n/x and(n%x<1)*4-f(n,x+2)

1
Вітаю за виграш щедрості! Рекурсивне віднімання - це чистий і короткий спосіб виразити змінну суму для непарних дільників без необхідності витягати знак у самого дільника. Крім того, заслуга xsot за впорядкування рішення Пітера Тейлора до рекурсивного з розумним керуванням n = 0.
xnor


12

J, 16 байт

+/@,@:=+&*:/~@i:

Це монадійне дієслово (іншими словами, одинарна функція). Спробуйте в Інтернеті чи перегляньте всі тестові справи .

Пояснення

+/@,@:=+&*:/~@i:  Denote input by n
              i:  The array of integers from -n to n
           /~@    Take outer product wrt the following function:
       +           the sum of
        &*:        squares of both inputs
                  This results in a 2D array of a^2+b^2 for all a, b between -n and n
      =           Replace by 1 those entries that are equal to n, and others by 0
   ,@:            Flatten the binary matrix
+/@               Take its sum

11

Python 2, 69 55 53 52 байт

f=lambda n,x=1:+(x>n)or(2-x%4)*(n%x<1)+f(n,x+2)/4<<2

Це рекурсивна функція, заснована на відмінному рішенні Пітера Тейлора .


1
Це велике вдосконалення. Але все ж є спосіб скоротити його, і я закликаю вас це шукати.
xnor

1
@xnor Ще один байт вниз. Я сподіваюся, що у вас більше не буде хитрощів.
xsot

2
Я не знаю , чи повинен я зробити відповідь його, це тільки ваше рішення плюс один трюк: f=lambda n,x=1:+(x>n)or(n%x<1)-f(n,x+2)/4<<2. Крім того, я думаю, нам не байдуже перевищувати максимальну глибину рекурсії за замовчуванням?
Мітч Шварц

1
@MitchSchwartz Я думаю, що це неймовірне поліпшення, гідне виграшу і, ймовірно, остаточний xnor оптимізації мав на увазі.
xsot

1
@MitchSchwartz Так, це оптимізація, про яку я думав! І хитрість xsot /4<<2робить її коротшою, ніж у мене.
xnor

8

Джулія, 40 байт

n->n>0?4sum(i->(n-i^2)^.5%1==0,1:n^.5):1

Безголівки:

function f(n)
  if n==0
    return 1           # Handle special case of n=0
  else
    m=0                # Start the counter at zero
    for i=1:sqrt(n)    # Loop over the values (i) whose squares are
                       # less than n (except zero)
      k=sqrt(n-i^2)    # Find k such that n=k^2+i^2
      if k==floor(k)   # if k is an integer, we've found a pair
        m+=4           # Add one for each of k^2+i^2, (-k)^2+(-i)^2, and the other two
      end
    end
    return m           # Return the resulting count
  end
end

Зауважте, що цикл не включає i==0, тому що, коли nце квадрат, він вже включений i=sqrt(n), і для цієї форми є лише чотири, а не вісім 0^2+k^2, 0^2+(-k)^2, k^2+0^2, (-k)^2+0^2.


7

CJam, 25 23 байт

Zri:R#Ym*{Rf-Yf#:+R=},,

Це теоретичне рішення, яке вимагає часу (9 n ) часу та пам'яті для введення n .

Ціною одного додаткового байта - загалом 24 байти - ми можемо зменшити складність до O (n 2 ) :

ri:R)Y*Ym*{Rf-Yf#:+R=},,

Спробуйте в Інтернеті!

Як це працює

Або

Z                  Push 3.
 ri:R              Read an integer from STDIN and save it in R.
     #             Compute 3**R.

або

ri:R               Read an integer from STDIN and save it in R.
    )Y*            Add 1 and multiply by 2.

Тоді

Ym*                Take the second Cartesian power, i.e., compute all pairs.
   {          },   Filter the pairs:
    Rf-              Subtract R from each.
       Yf#           Square the differences.
          :+         Add the squares.
            R=       Compare with R.
                   If = pushed 1, keep the pair.
                ,  Count the kept pairs.

І заощадивши один байт, можна знизити складність до Õ (n)
Пітер Тейлор

Так я бачив. Це дивовижно.
Денніс

7

CJam ( 25 24 22 21 байт)

{:X!X{X\2*)%!4*\-}/z}

Демонстрація в Інтернеті

Це працює в псевдоквазілінеарний час * і використовує твердження OEIS, що

Перетворення Мебіуса - це послідовність періоду 4 [4, 0, -4, 0, ...]. - Майкл Сомос, 17 вересня 2007 року

Вхід 0, очевидно, є особливим випадком (Möbius transforms та annihilators не йдуть добре), але в кінцевому рахунку коштував лише один char.

* Псевдо- тому, що це квазілінійне значення вводу, а не розмір введення; квазі, оскільки він виконує Theta(n)операції над цілими величинами на порядок n; bоперацію -бітового мода слід приймати b lg bчас, так що в цілому це займає Theta(n lg n lg lg n)час.


6

Japt , 42 37 33 байт

Japt - скорочена версія Ja vaScri pt . Перекладач

V=Un oU+1;Vr@X+(Vf_p2 +Y*Y¥U)l ,0

Як це працює

           // Implicit: U = input number
V=Un oU+1  // Set variable V to range(-U, U+1). Ends up like [-U,-U+1,...,U-1,U]
Vr@    ,0  // Reduce each item Y in V with this function, starting at 0:
X+(     l  //  Return the previous value X + the length of:
Vf_p2      //   V filtered by items Z where Z*Z
+Y*Y==U)   //    + Y*Y equals U.
           // This ends up as the combined length of all fitting pairs of squares.
           // Implicit: return last expression

Можливо, є краща техніка; пропозиції вітаються.


6

Python 3, 68 61 60 байт

lambda n:0**n+4*sum(i**.5%1+(n-i)**.5%1==0for i in range(n))

Використання двох вкладених списків є занадто дорогим. Натомість це перевіряє, чи обидві координати кола радіуса sqrt (n) є цілими числами.

Пітер Тейлор переміг це за допомогою підходу, заснованого на інверсії Мебіуса .


Молодці. Я розмовляв з рекурсивною функцією, але не міг вирішити n=0елегантно.
xsot


5

Хаскелл, 42 байти

f n|q<-[-n..n]=sum[1|a<-q,b<-q,a*a+b*b==n]

Використання прикладу:

*Main> map f [0..25]
[1,4,4,0,4,8,0,0,4,4,8,0,0,8,0,0,4,8,4,0,8,0,0,0,0,12]
*Main> 

3
Обв’язування qв охороні розумне, я згадаю цю хитрість.
xnor

5

Джулія, 89 79 63 байт

g(x)=cos(π*x^.5)^2÷1
a(n)=(n==0)+4sum([g(i)g(n-i)for i=1:n])

Це названа функція, aяка приймає ціле число і повертає поплавок. Він викликає функцію помічника g.

Безголівки:

function g(x::Integer)
    floor(cos(π*sqrt(x))^2)
end

function a(n::Integer)
    (n == 0) + 4*sum([g(i)*g(n-i) for i=1:n])
end

У цьому підході використовується спрощення формули Веслі Івана Херта, зазначеної в OEIS. Спрощення знайшов Глен О, той самий чоловік, який збрив 26 байт з цієї відповіді!


Використовуйте, x^.5а не sqrt(x)для збереження 3 байтів. І (n==0)економить 2 байти 1÷(n+1). І ви можете зберегти ще 4 символи, використовуючи, cos(π*sqrt(x))^2÷1а не floor(cos(π*sqrt(x))^2). Крім того, використовуйте, 1:n/2а не 1:n÷2тому, що немає ніякої шкоди з використанням float в, g(x)і він все одно буде заблокований до цілих чисел i. І sum(i->g(i)g(n-i),1:n/2)поголитимуть ще декількох персонажів.
Глен О

@GlenO Чудові пропозиції, дякую. Хоча sumхитрість не вдається n=0, тому я продовжував розуміти масив.
Олексій А.

1
Отже, його можна відновити - якщо ви дозволите, що i=0справа відбудеться в сумі, ви можете увімкнути знак 4g(n). Отже (n==0)-4g(n)-4g(n/2)+8sum(i->g(i)g(n-i),0:n/2), що не впаде в помилку. Але ви можете зробити ще краще, помітивши симетрії -(n==0)+4sum([g(i)g(n-i)for i=1:n])
Glen O

@GlenO Це спрощення є серйозно геніальним. Рекомендую подати це як альтернативну формулу послідовності на OEIS!
Олексій А.

4

Pyth, 16 15 байт

lfqQs^R2T^}_QQ2

Спробуйте його в Інтернеті в компіляторі Pyth .

Як це працює

lfqQs^R2T^}_QQ2

          }_QQ   Compute the inclusive range from -Q to Q (input).
         ^    2  Take the second Cartesian power, i.e., compute all pairs.
 f               Filter; for each T in the list of pairs:
     ^R2T          Compute the squares of T's elements.
    s              Add the squares.
  qQ               Compare the sum with Q.
                 If q returned True, keep T.
l                Count the kept pairs.

4

TI-BASIC, 23 байти

sum(seq(Σ(X²+Y²=Ans,X,-Ans,Ans),Y,-Ans,Ans

Досить прямо. Σ(це підсумовування.

Як не дивно, sum(seq(sum(seq(кидає ERR:ILLEGAL NESTі так само Σ(Σ(, але sum(seq(Σ(добре. Я вирішив покласти Σ(внутрішню сторону, щоб врятувати близьких батьків.


Яка різниця між sumі Σ?
алефальфа

1
@alephalpha Σ (приймає підсумок, додаючи всі X²+Y²=Ansзначення зі значень X між -Ansі Ans. sum (це сума списку , тому нам потрібно створити список спочатку за допомогою seq (..., Y, -Ans, Ans
lirtosiast

4

JavaScript (ES6), 66 60 байт

n=>eval("for(r=0,a=~n;a++<n;)for(b=~n;b++<n;)r+=a*a+b*b==n")

6 байт збережено завдяки @ edc65 !

Пояснення

n=>eval(`              // use eval to allow for loops in an unparenthesised arrow function
  for(r=0,             // r = number of pairs
    a=~n;a++<n;        // a = first number to square
  )
      for(b=~n;b++<n;) // b = second number to square
        r+=a*a+b*b==n  // add one to the result if a^2 + b^2 == n
                       // implicit: return r
`)

Тест

n = <input type="number" oninput='result.innerHTML=(

n=>eval("for(r=0,a=~n;a++<n;)for(b=~n;b++<n;)r+=a*a+b*b==n")

)(+this.value)' /><pre id="result"></pre>


1
60:n=>eval('for(r=0,a=~n;a++<n;)for(b=~n;b++<n;)r+=a*a+b*b==n')
edc65

@ edc65 Приємно! Я не думав використовувати evalдля введення forциклів функцію стрілки без дужок. Я також забув про ~оператора ха-ха.
користувач81655

4

Python 3, 93 62 69 байт

Itertools не працював, тому я знову використав два діапазони, але перемістив діапазон, щоб зберегти байти.

Редагувати: Попередній код насправді не працював, оскільки я визначив діапазон понад n до того, як я визначив n.

lambda n:sum(i*i+j*j==n for i in range(-n,n+1)for j in range(-n,n+1))

2

APL, 23 20 19 байт

{+/⍵=∊∘.+⍨×⍨0,,⍨⍳⍵}

Пояснення:

{+/⍵=∊∘.+⍨×⍨0,,⍨⍳⍵}        Monadic function:
                 ⍳⍵          1 2 3 ... ⍵
               ,⍨            Duplicate
             0,              Concatenate to 0
          ×⍨                 Square everything
      ∘.+⍨                   Make an addition table
     ∊                       Flatten
   ⍵=                        1s where equal to the input
 +/                          Sum up the 1s

Крім того, що APL не має функції J i:(числа від -n до n), це працює майже як відповідь J.

Ми не можемо скористатись поїздом, тому що отримання -\⍳2×⍵синтаксичного розбору, як (-\) ⍳ (2×⍵)би коштувало три байти; аналогічно з іншими парами атопів. Усі ці дужки скорочують регулярну функцію.

Спробуйте тут . Вихід засобів 1означає, що всі значення відповідають.


2

Matlab 41 байт

Ще менші, як попередні відповіді

@(n)nnz(~mod(sqrt(n-(1:n^.5).^2),1))*4+~n

По суті відповідь Agawa001 замінено на потужність та sqrt


2

Цукерки , 17 14 байт

Введення висунуто на стек спочатку

~TbAT1C(sWs+Aeh)Z

~T0C(sWs+Aeh)Z

peekA    # copy arg from stack to register A
range2   # create double sided range on stack, -A, 1-A, ... A-1, A
digit0   # prefix argument to 'cart', 
cart     # cartesian product of current stack(0), and other stack(0)
while    # while stack not empty
  sqr    # pop and square and push
  swap   # swap two stack elements
  sqr    # pop and square and push
  add    # pop and pop and add and push
  pushA  # push original argument
  equal  # equality test 0/1
  popAddZ  # Z := Z + pop
endwhile
pushZ    # push Z onto stack, will be output to stdout on termination

2

CJam, 28

qi_mF{3a>},{~)\4%2-&}%4+:*1?

Не дуже короткий, але ефективний. Наприклад, результат для 15625 миттєво 28. Використовує формулу, засновану на факторизації від OEIS.
Спробуйте в Інтернеті

Пояснення:

qi       read input and convert to integer
_        make a copy (will be used to handle the 0 case at the end)
mF       factorize into [prime exponent] pairs
{…},     filter the array of pairs
  3a>    with the condition that the pair is greater than [3]
          which means the prime factor must be ⩾3
{…}%     transform each pair as follows:
  ~      dump the prime factor and exponent onto the stack
  )      increment the exponent
  \      swap with the prime
  4%     get the remainder mod 4 (it will be 1 or 3)
  2-     subtract 2 (resulting in -1 or 1)
  &      bitwise AND with the incremented exponent (see below)
4+       append a 4 to the array
:*       multiply all
1?       if the input was 0, use 1, else use the above result

Деякі деталі щодо розрахунку:

  • якщо прайм 1 мод 4, код обчислює (exponent + 1) & -1, що єexponent + 1
  • якщо прайм - 3 mod 4, код обчислює (exponent + 1) & 1, що дорівнює 0, якщо показник непарний, і 1, якщо парне

Усі ці значення, помножені разом і помножені на 4, є саме формулою OEIS.


2

Python 2, 68 байт

def x(n):r=range(-n,n+1);print sum(a*a+b*b==n for a in r for b in r)

Визначає функцію, що називається, x()яка приймає число n.

Спробуйте в Інтернеті. http://ideone.com/aRoxGF


Вам не вистачає printабо returnзаяви.
Згарб

Спасибі, я зовсім забув. Хоча посилання має твердження про друк Я редагував свій код під час створення коду.
Rɪᴋᴇʀ

Гаразд, ніяких турбот. Але це також видає неправильні результати для n=0та n=1(0 і 2 замість 1 і 4). Можливо, межі діапазону потребують коригування?
Згарб

@ Zgarb Так, вони повинні закінчитися n+1.
lirtosiast

1
Я буду його шукати.
Rɪᴋᴇʀ

2

Pyth, 41 35 33 30 27 байт

Спробуйте в Інтернеті.

Редагувати: Завдяки isaacg , я прийшов mі *Fпрацювати! ТАК!

?Q*F+4m.&tt%ed4hhdr-PQ2 8 1
                                (implicit) Q = input()
?Q                              If Q != 0
      m                           Map to d (exponent, prime) from ...
                  r-PQ2 8         run-length-encoded(PQ with 2's removed)
       .&                           Bitwise and
           %ed4                       d[-1] % 4
         tt                           -2
                hd                  with d[0]
               h                      +1
    +4                            Append 4 to the resulting array
  *F                              Then multiply it all together
                          1     Else 1

Редагувати: Помістіть біт і назад, щоб отримати більше байт! Також я видалив усі речі "Раніше". Це почало захаращуватися.

Завдяки aditsu та його рішенням CJam, а також maltysen та його порадам (Одного разу я приймуm*Fd на роботу. Один день ...)

J4Vr-PQ2 8=J*J.&tt%eN4hhN;?QJ1
                                (implicit) Q=input()
J4                              J=4
    -PQ2                        Remove all 2's from the prime factorization of Q
   r     8                      run-length encode (exponent, prime factor)
  V                      ;      For N in range( the above ):
          =J*J                      J = J * ...
                tt%eN4                N[-1] mod 4 -2 
                      hhN             (exponent + 1)
              .&                    bitwise and
                          ?QJ1  if Q != 0 print(J) else print(1)

Зауважте,

  • якщо прайм 1 мод 4, ми отримуємо -1 & (exponent + 1), що єexponent + 1

  • але якщо простим є 3 mod 4, ми отримуємо 1 & (exponent + 1), тобто 0якщо показник непарний, і 1якщо парне

Помножимо все це разом (рази 4 на початку) і отримаємо кількість сум двох квадратів, які складаються з нашого введення.


2

Пітон, 57 байт

Приємний виклик. На жаль, наразі я не коротший, ніж це.

lambda n:0**n+sum(2-d%4for d in range(1,n+1)if d%2>n%d)*4

2

PARI / GP, 34 28 байт

Використання функцій генерації:

Збережено 6 байт завдяки Мітчу Шварцу .

n->sum(i=-n,n,x^i^2)^2\x^n%x

Використовуючи вбудовані модулі, 33 байти (збережено 1 байт завдяки Мітчу Шварцу ):

n->if(n,2*qfrep(matid(2),n)[n],1)

qfrep (q, B, {flag = 0}): вектор (половини) кількості векторів норм від 1 до B для цілісної і визначеної квадратичної форми q. Якщо прапор дорівнює 1, рахуйте вектори парної норми від 1 до 2В.



matid(2)зберігає байт.
Мітч Шварц

1
І до 28 для підходу до створення функції:n->sum(i=-n,n,x^i^2)^2\x^n%x
Мітч Шварц

1

Матлаб, 72 байти

n=input('');m=fix(sqrt(n));m=(-m:m).^2;disp(nnz(bsxfun(@plus,m,m')==n))


@StewieGriffin Дякую! Але в цьому випадку це програма, а не функція. Отже, згідно з прийнятою відповіддю у вашому посиланні вона потрібна, чи не так?
Луїс Мендо

1

Матлаб, 63 50 байт

@(y)nnz(~mod(sqrt(y-power((1:sqrt(y)),2)),1))*4+~y

  • Це дійсно обіграє інший однойменний код, таким чином я ставлю його: D.

  • Програма знаходить додатні цілі рішення, а потім помножте на 4, щоб охопити негативні.

  • Він може виконати всі 25 перших тестових випадків

    for i=1:25 ans(i)
    end
    
       1
    
       4
    
       4
    
       0
    
       4
    
       8
    
       0
    
       0
    
       4
    
       4
    
       8
    
       0
    
       0
    
       8
    
       0
    
       0
    
       4
    
       8
    
       4
    
       0
    
       8
    
       0
    
       0
    
       0
    
       0
    
       12
    


дякую @StewieGriffin я включив його просто як чесну гру, що стосується luis '
Abr001am

Поради: Коли ви плануєте розміщувати результати MATLAB, використовуйте format compact=)
Стюі Гріффін

1

JavaScript, 89 байт

n=prompt()
p=Math.pow
for (x=c=(+n?0:1);x<=n;x++)if(x&&p(n-p(x,2),.5)%1===0)c+=4
alert(c)

Я знаю, що це не найкоротший відповідь JavaScript, навіть якщо я видаляю лінії вводу-виводу, але я думаю, що це найкраща відповідь JS, яка дає мені результат за мільйон протягом декількох секунд (десять мільйонів зайняли приблизно хвилина).


Чи можете ви використовувати == замість ===?
lirtosiast

Я міг би, просто використовуючи кращі практики, ха-ха.
Адам Даллі

1

PHP, 70 байт, не конкуруючи

for($x=-1;$x++<=$n=$argv[1];)$s+=(-($n%($x-~$x)<1))**$x*4;echo$n?$s:1;

алгоритм, викрадений з однієї з відповідей Python ... я забув, який з них; хотів хоча б частково зрозуміти, що відбувається до того, як я розмістив повідомлення.


for(;$x<=$n=$argv[1];)$s+=(-($n%(2*$x+1)<1))**$x++*4;echo$n?$s:1;економить 5 байт. $x-~$xдорівнює, 2*$x+1і тепер можна починати, не призначаючи змінну.
Йорг Гюльсерманн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.