• 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}]

     

  • 相关阅读:
    P1338 末日的传说
    P1364医院设置
    线程
    进程通信
    CentOS设置中文
    C++快读讲解
    迭代加深搜索
    P1118 [USACO06FEB]Backward Digit Sums G/S
    N皇后问题
    RMQ区间最值查询
  • 原文地址:https://www.cnblogs.com/dingblog/p/4498764.html
Copyright © 2020-2023  润新知