总和的差异

Raf*_*ler 3 language-agnostic math

我完全不赞成这一挑战.这是项目欧拉问题6:

前十个自然数的平方和是1 2 + 2 2 + ... + 10 2 = 385

前十个自然数之和的平方为(1 + 2 + ... + 10)2 = 55 2 = 3025

因此,前十个自然数的平方和与总和的平方之差为3025-385 = 2640.

找出前100个自然数的平方和与总和的平方之间的差异.

当我注意到我的解决方案(在Python中)非常非常短时,我对这里的一些代码打高兴兴趣了.我想看看其他一些语言(perl,我在看你!)是如何将它带入这个简单的问题.

那么,解决这个问题的最短方法是什么?最短意味着源代码中的字符最少.

注意:解决前n个自然数的奖励积分.

Eam*_*nne 15

几乎任何语言:20个字符.

(n*n-1)*(3*n+2)*n/12
Run Code Online (Sandbox Code Playgroud)


Gab*_*aru 8

40/ 49 43个字符; 应该适用于大多数语言

n=100;(n*(n+1)/2)**2-n*(n+1)*(2*n+1)/6;
Run Code Online (Sandbox Code Playgroud)

应该用某些语言工作;

n=100;n*(n+1)*n*(n+1)/4-n*(n+1)*(2*n+1)/6;
Run Code Online (Sandbox Code Playgroud)

这应该适用于大多数语言.

请注意1^2 + 2^2 + ... + n^2 = n(n+1)(2n+1)/61 + 2 + ... + n = n(n+1)/2

编辑:哦,你只需要删除前6个字符.


Mat*_*lia 5

由于@Gabi Purcaru已经发布了"智能"解决方案(来自两个简单的数学证明),并且这个问题的简短解决方案很容易,相反我会发布一个基于模板元编程的解决方案,我不认为没有无用的垃圾/空白/ ....

C++ - 648 659字符

#include <iostream>

template<int Num>
struct Square
{
    static const int Value = Num*Num;
};

template<int Num>
struct NatSum
{
    static const int Value=Num+NatSum<Num-1>::Value;
};

template<>
struct NatSum<0>
{
    static const int Value = 0;
};

template<int Num>
struct SquaresSum
{
    static const int Value=Square<Num>::Value+SquaresSum<Num-1>::Value;
};

template<>
struct SquaresSum<0>
{
    static const int Value = 0;
};

template<int Num>
struct DifferenceOfSums
{
    static const int Value = Square<NatSum<Num>::Value>::Value - SquaresSum<Num>::Value;
};

int main()
{
    std::cout<<DifferenceOfSums<100>::Value<<std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在享受在编译时计算的挑战结果并直接放入可执行文件中.:)

  • meh ...我知道为什么没有最长的答案的gode高尔夫球..:P顺便说一句.有人认为这比高尔夫版本更具可读性吗? (2认同)