用 C++ 计数能被 2 到 10 之间所有数字整除的数字
给定一个数字,例如 num,任务是计算 1 到 num 范围内能被 2、3、4、5、6、7、8、9 和 10 整除的数字个数。
输入 − int num = 10000
输出 − 能被 2 到 10 之间所有数字整除的数字个数为:3
解释 − 从 1 到 10000 中,有 3 个数字能被从 2 到 10 的所有数字整除,它们是:
2520-: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 18, 20, 21, 24, 28, 30, 35, 36, 40, 42, 45, 56, 60, 63, 70, 72, 84, 90, 105, 120, 126, 140, 168, 180, 210, 252, 280, 315, 360, 420, 504, 630, 840, 1260, 2520. 5040-: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 28, 30, 35, 36, 40, 42, 45, 48, 56, 60, 63, 70, 72, 80, 84, 90, 105, 112, 120, 126, 140, 144, 168, 180, 210, 240, 252, 280, 315, 336, 360, 420, 504, 560, 630, 720, 840, 1008, 1260, 1680, 2520, 5040 7560-: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 18, 20, 21, 24, 27, 28, 30, 35, 36, 40, 42, 45, 54, 56, 60, 63, 70, 72, 84, 90, 105, 108, 120, 126, 135, 140, 168, 180, 189, 210, 216, 252, 270, 280, 315, 360, 378, 420, 504, 540, 630, 756, 840, 945, 1080, 1260, 1512, 1890, 2520, 3780.
输入 − int num = 20000
输出 − 能被 2 到 10 之间所有数字整除的数字个数为:6
解释 − 从 1 到 20000 中,有 6 个数字能被从 2 到 10 的所有数字整除,它们是 − 2520, 5040, 7560, 10080, 12600, 15120,
下面程序中使用的方案如下:
解决这个问题有多种方法,即朴素方法和高效方法。让我们首先看看**朴素方法**。
输入数字,例如 num
创建一个数组,并将 2 到 10 之间的数字存储到长度为 9 的整数数组中。
使用两个临时变量:count 用于存储数字总数,flag 用于检查数字是否可被整除。
从 i=1 到 num 开始循环
在循环内,将 num 设置为 i,并将索引设置为 0
直到索引小于 9(即数组大小)时开始 while 循环
检查 IF num % arr[index++] == 0,则将 flag 设置为 1,否则将 flag 设置为 0
检查 IF flag 为 1,则将 count 加 1
返回 count
打印结果。
高效方法
我们可以看到,能被 2 到 10 的所有数字整除的数字具有规律。
能被 2 到 10 的所有数字整除的最小数字是 2520
5 * 7 * 8 * 9 = 2520(n = 1) 5 * 7 * 8 * 9 * 2 = 5040(n = 2) 5 * 7 * 8 * 9 * 3 = 7560(n = 3) . .
我们可以看到,2520 是所有能被 2、3、4、5、6、7、8、9、10 整除的数字的公因子。因此,如果我们将给定数字除以 2520,我们将得到结果。
代码 1(朴素方法)
示例
#include <bits/stdc++.h> using namespace std; int count(int num){ int count = 0; int flag=0; int index=0; int arr[9] = {2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int i = 1; i <= num; i++){ int num = i; index=0; while(index<9){ if(num % arr[index++] == 0){ flag=1; } else{ flag=0; break; } } if (flag == 1){ count++; } } return count; } int main(){ int num = 10000; cout<<"Count numbers which are divisible by all the numbers from 2 to 10 are: "<<count(num); return 0; }
输出
如果运行上面的代码,它将生成以下输出:
Count numbers which are divisible by all the numbers from 2 to 10 are: 3
代码 2(高效方法)
示例
#include <bits/stdc++.h> using namespace std; int main(){ int num = 10000; int count = num / 2520; cout<<"Count numbers which are divisible by all the numbers from 2 to 10 are: "<<count; return 0; }
输出
如果运行上面的代码,它将生成以下输出:
Count numbers which are divisible by all the numbers from 2 to 10 are: 3