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个自然数的奖励积分.
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)/6和1 + 2 + ... + n = n(n+1)/2
编辑:哦,你只需要删除前6个字符.
由于@Gabi Purcaru已经发布了"智能"解决方案(来自两个简单的数学证明),并且这个问题的简短解决方案很容易,相反我会发布一个基于模板元编程的长解决方案,我不认为没有无用的垃圾/空白/ ....
#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)
现在享受在编译时计算的挑战结果并直接放入可执行文件中.:)
| 归档时间: |
|
| 查看次数: |
3325 次 |
| 最近记录: |