码迷,mamicode.com
首页 > 其他好文 > 详细

PE1 Multiples of 3 and 5

时间:2015-05-12 22:51:29      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

 

前言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+7=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}]

 

PE1 Multiples of 3 and 5

标签:

原文地址:http://www.cnblogs.com/dingblog/p/4498764.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!