PE1 Multiples of 3 and 5

 

前言PEProject Eluer)是学Mathematica(以后我简称Mma)接触到的,不用提交代码,只用提交答案的答题网站。PE的题目会给出C++Mma代码实现,以此学习Mma(已经被它的简洁给折服了..)。

 

题目

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.Find the sum of all the multiples of 3 or 5 below 1000.

https://projecteuler.net/problem=1

分析

PE第一题,求的是1000以下是3或者5的倍数的数之和,比较简单。

n   暴力解法:直接for 1 to 1003或者5的倍数之和算出来。执行100次。

n   分开解法:把35做两个并列分开算,即两个for循环,但是整除15数计算重复,需要要减去一次,执行33+20+6=60次。

n   等差公式法:Sum = a1*n+n*(n-1)/2*d;(本题d与首项a1相等),时间复杂度(1)。

Code

 

#include<iostream>

int MulSum(int max, int a);

int main(){

    int max= 999;

    int a = MulSum(max,3);

    int b = MulSum(max, 5);

    int c = MulSum(max, 15);

    int e = a + b - c;

    std::cout << e;

    return 0;

}

int MulSum(intmax,inta){//a为范围,b为整除数字,即为等差数列首项,也是公差

    int n = max/ a;//项数

    return n*a + (n*(n - 1)) / 2 * a;

}

 

Mathematica  

暴力法:Select[Range[3, 999], Mod[#, 3] == 0 || Mod[#, 5] == 0 & ] // Total

分开法:{Range[3, 999, 3], Range[5, 999, 5]} // Flatten // Union // Total

公式法:Sum[i,{i,3,99,3}] + Sum[i, {i, 5, 999, 5}] - Sum[i, {i, 15, 999, 15}]

 

posted on 2015-05-12 21:56  DYF_WUH  阅读(151)  评论(0编辑  收藏  举报