尤拉計畫 3的倍數和5的倍數

2021-10-04 12:23:09 字數 870 閱讀 6255

如果我們列出10以內所有3或5的倍數,我們將得到3、5、6和9,這些數的和是23。

求1000以內所有3或5的倍數的和。

將問題分解為求1000以內所有3的倍數之和,以及求1000以內所有5的倍數之和兩個問題,進一步抽象為計算在max以內所有d的倍數之和。

事實上max以內所有d的倍數均是公差為d的等差數列,問題轉換為求等差數列的n項和。

首先,計算在max以內公差為d的等差數列項數,用n表示,則:n=(max-1)/d

其次,等差數列的第一項為d本身,通過等差數列前n項和公式求得結果,用s表示,則:s=nd+n(n-1)d/2

最後,由於本問題是求1000以內所有3或5的倍數的和,因此3和5的所有公倍數被重複計算,需要減去max以內所有15(最小公倍數)的倍數之和。

本演算法時間複雜度o(1),空間複雜度o(1)

// 在max以內,計算d的倍數之和

intsum

(int max,

int d)

計算結果輸出:

cout <<

sum(

1000,3

)+sum(

1000,5

)-sum(

1000,15

)<< endl;

#include

using

namespace std;

// 在max以內,計算d的倍數之和

intsum

(int max,

int d)

intmain()

備註:尤拉計畫

尤拉計畫001 3的倍數和5的倍數

題目 10以下的自然數中,屬於3和5的倍數的有3,5,6和9,它們之和是23.找出1000以下的自然數中,屬於3和5的倍數的數字之和。用窮舉法 如下 include int main printf d以下的自然數中,屬於3和5的倍數的數字之和為 d n max,sum return 0 這個 遍歷了...

尤拉計畫5(最小倍數)

2520是最小的能夠被1到10整除的數。最小的能夠被1到20整除的正數是多少?分析 實現min num 2520 while true isresult true 用於標記是否是能夠被1到20整除的數 for i in range 1 21 if min num i 0 pass else isre...

N的倍數 抽屜原理 字首和

題目傳送門 題意 給你n個數,要你從這n個數中選出幾個數,他們的和恰好是n的整數倍。輸出所選數的個數,和數。思路 這道題要用到容斥原理。首先,n個數有n個字首和,他們 n的餘數,要麼全部不相同,即0 n 1,這種情況,餘數為0的字首和就是所求的區間。另外一種情況就是,至少有2個字首和 n的餘數是相同...