用 C++ 求可被 2 和 7 整除的前 N 个自然数之和
在这个问题中,我们得到了一个数 N。我们的任务是求出前 N 个自然数中能同时被 2 和 7 整除的数之和。
那么,这里我们得到一个数 N,程序要找到 1 到 N 之间能同时被 2 和 7 整除的数之和。
我们举个例子来理解这个问题,
输入 −
N = 10
输出 −
37
说明 −
sum = 2 + 4 + 6 + 7 + 8 + 10 = 37
因此,解决问题的基本思路是找出所有能同时被 2 或 7 整除的数。这个和为 −
Sum of numbers divisible by 2 + sum of numbers divisible by 7 - sum of number divisible by 14.
所有这些和可以使用等差数列公式生成,
S2 = [( (N/2)/2) * ( (2*2)+((N/2-1)*2) )] S7 = [( (N/7)/2) * ( (2*7)+((N/7-1)*7) )] S14 = [( (N/14)/2) * ( (2*14)+((N/2-1)*14) )]
最终和,
Sum = S2 + S7 - S14 Sum = [( (N/2)/2) * ( (2*2)+((N/2-1)*2) )] + [( (N/7)/2) * ( (2*7)+((N/7-1)*7) )] - [( (N/14)/2) * ( (2*14)+((N/2-1)*14) )]
示例
说明解决方案的程序,
#include <iostream> using namespace std; int findSum(int N) { return ( ((N/2)*(2*2+(N/2-1)*2)/2) + ((N/7)*(2*7+(N/7-1)*7)/2) - ((N/14)*(2*14+(N/14-1)*14)/2) ); } int main(){ int N = 42; cout<<"The sum of natural numbers which are divisible by 2 and 7 is "<<findSum(N); return 0; }
输出
The sum of natural numbers which are divisible by 2 and 7 is 525
广告