sc_*_*ray 4 c# algorithm optimization refactoring
我听过很多关于Project Euler的消息,所以我想我解决了C#中的一个问题.网站上所述的问题如下:
如果我们列出10以下的所有自然数是3或5的倍数,我们得到3,5,6和9.这些倍数的总和是23.
求出1000以下3或5的所有倍数的总和.
我编写了如下代码:
class EulerProblem1
{
public static void Main()
{
var totalNum = 1000;
var counter = 1;
var sum = 0;
while (counter < totalNum)
{
if (DivisibleByThreeOrFive(counter))
sum += counter;
counter++;
}
Console.WriteLine("Total Sum: {0}", sum);
Console.ReadKey();
}
private static bool DivisibleByThreeOrFive(int counter)
{
return ((counter % 3 == 0) || (counter % 5 == 0));
}
}
Run Code Online (Sandbox Code Playgroud)
能够以更少的冗长/更清晰的语法和更好的优化来获得关于替代实现的一些想法将会很棒.这些想法可能从快速和肮脏到带出大炮消灭蚊子.目的是探索计算机科学的深度,同时尝试改进这个特别琐碎的代码片段.
谢谢
更新为不重复计算3和5的倍数的数字:
int EulerProblem(int totalNum)
{
int a = (totalNum-1)/3;
int b = (totalNum-1)/5;
int c = (totalNum-1)/15;
int d = a*(a+1)/2;
int e = b*(b+1)/2;
int f = c*(c+1)/2;
return 3*d + 5*e - 15*f;
}
Run Code Online (Sandbox Code Playgroud)