Разница сумм - PullRequest
       26

Разница сумм

2 голосов
/ 21 октября 2010

Я не принимаю кредит на этот вызов вообще.Это Задача проекта Эйлера 6 :

Сумма квадратов первых десяти натуральных чисел равна 1 2 + 2 2 + ... + 10 2 = 385

Квадрат суммы первых десяти натуральных чисел равен (1 + 2 + ... + 10) 2 = 55 2 = 3025

Следовательно, разница между суммой квадратов первых десяти натуральных чисел и квадратом суммы составляет 3025 - 385 = 2640.

Найдите разницу между суммой квадратов первых ста натуральных чисел и квадратом суммы.

Я заинтересовался некоторыми играми в коде, когда заметил свое решение (в Python) было очень и очень коротким.Я хочу посмотреть, как некоторые другие языки (perl, я смотрю на вас!) Могут привести к этой простой проблеме.

Итак, каков кратчайший путь решения этой проблемы?Кратчайший означает наименьшее количество символов в исходном коде.

ПРИМЕЧАНИЕ: бонусные баллы за решение для первых n натуральных чисел.

Ответы [ 20 ]

1 голос
/ 21 октября 2010

Haskell - 33 символа

g x=sum.map(\y->(y-1)*y*y)$[2..x]

edit:

Для создания полной программы нам нужно 79 символов

import System
main=getArgs>>=print.(\x->sum.map(\y->(y-1)*y*y)$[2..x]).read.head
1 голос
/ 21 октября 2010

C #

Math.Pow(Enumerable.Range(1, 100).Sum(), 2)-
Enumerable.Range(1, 100).Select(i => i*i).Sum()
1 голос
/ 21 октября 2010

Python 2.x, 48 символов

a=range(n+1)
print sum(a)**2-sum(x*x for x in a)

Я изначально написал его в Python 3.x, что составляет 49 символов:

a=range(n+1)
print(sum(a)**2-sum(x*x for x in a))
0 голосов
/ 22 октября 2010

Mathematica 8 символов

"Мой вход - твой выход"

  In> 25164150
  Out> 25164150

25164150 - это полное допустимое выражение Mathematica, которое может быть оценено самостоятельно.

0 голосов
/ 21 октября 2010

Perl, 41 символ

Это «правильная» попытка.

Код : $c+=$_**2,$e+=$_ for 0..pop;print$e**2-$c

Использование :

$ perl -e '$c+=$_**2,$e+=$_ for 0..pop;print$e**2-$c' 100
25164150
0 голосов
/ 21 октября 2010
import numpy
v = numpy.arange(100)
print sum(v)**2 - sum(v*v)
0 голосов
/ 21 октября 2010

Mathematica: грубая сила (39 символов, 6 съемных):

    Plus@@# ^2 - Plus@@ (#^2) &@ Range[100]

с помощью математики, на лету (70 символов, 24 съемных - у нас нет есть для упрощения, определения нижних пределов или использования трехзначного имени функции):

    In[1]:= foo[k_] = Simplify[Sum[n, {n, 1, k}]^2 - Sum[n^2, {n, 1, k}]]
            foo[100]
    Out[1]= 1/12 k (-2 - 3 k + 2 k^2 + 3 k^3)
    Out[2]= 25164150

с помощью ранее выполненной математики (40 символов, 11 сменных)

    1/12 # (-2 - 3 # + 2 #^2 + 3 #^3) &@ 100

Как короткоэто может зависеть от того, сколько предварительных вычислений мы допустим.

0 голосов
/ 26 октября 2010

Oracle SQL - 82 символа

select sum(l)*sum(l)-sum(l*l) from (select level l from dual connect by level<=:n)
0 голосов
/ 21 января 2013

Вот решение в C * ура *

#include <stdio.h>
#include <stdlib.h>
//Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.
int main()
{
   int sum1=0,sum2=0,psum=0;

   for(int i=1;i<=100;i++)
   sum1+=i*i;

   for(int i=1;i<=100;i++)
   psum+=i;
   sum2=psum*psum;

   printf("\nDifference is: %d\n",sum2-sum1);


}
0 голосов
/ 21 октября 2010

Шахта тоже была короткой ...

def euler6(limit):
    """
    calculate the difference between the sum of the squares of
    the first n natural numbers and the square of the sum of
    the same n natural numbers.

      >>> euler6(10)
      2640


    """
    sequence = range(limit+1)
    squares = sum(map(lambda x: x*x, sequence))
    sums = sum(sequence)
    sums *= sums
    return sums-squares
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...