计算C ++中所有数组元素都可整除的范围内的数字
我们提供了两个数字START和END来定义数字范围。还有一个正数数组Arr[]。目的是找到可以被Arr[]的所有元素整除并且在[START,END]范围内的所有数字。
方法1(幼稚的方法)
我们将通过从START到END遍历数字来完成此操作,对于每个数字,我们将检查数字是否可被数组的所有元素整除。如果是,则增加计数。
方法2(通过LCM检查数组元素的可除性)
我们将找到所有数组元素的LCM,然后检查并计算[START,END]范围内可被该LCM完全整除的所有数字。
让我们通过示例来理解。
输入值
START=1 END=20 Arr[]= { 2, 4, 8 }
输出结果
Numbers that are divisible by all array elements: 2
说明
Numbers 8 and 16 are in the range that are divisible by all array elements.
输入值
START=100 END=200 Arr[]= { 230, 321, 490, 521 }
输出结果
Numbers that are divisible by all array elements: 0
说明
No number between 100 to 200 divisible by any array element.
方法1(幼稚的方法)
以下程序中使用的方法如下
我们将整数START和END用作范围变量。
函数divisiblebyArr(intstart,intend,intarr[],intlen)获取范围变量和数组,并返回可被所有数组元素整除的数字计数。
对于此类数字,将初始变量计数设为0。
将变量标志设为0
使用for循环遍历数字范围。我=开始我=结束
现在,对于每个数字num=i,使用while循环检查数字是否可被所有数组元素整除。
如果所有元素都完全除以num,则设置flag=1。
如果标志=1递增计数则在外部
在所有循环的末尾,count将有一个总数,该总数可被数组的所有元素整除。
返回计数结果。
示例
#include <bits/stdc++.h> using namespace std; int divisiblebyArr(int start, int end, int arr[], int len){ int count = 0; int flag=0; int index=0; for (int i = start; i <= end; i++){ int num = i; index=0; while(index<len){ if(num % arr[index++] == 0) { flag=1; } else{ flag=0; break; } } if (flag == 1) { count++; } } return count; } int main(){ int START = 5, END = 20; int Arr[] = {2,4,8 }; int len=sizeof(Arr)/sizeof(Arr[0]); cout <<"Numbers that are divisible by all array elements: "<< divisiblebyArr(START,END,Arr,len); return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出-
Numbers that are divisible by all array elements: 2
方法2(LCM方法)
以下程序中使用的方法如下
我们将整数START和END用作范围变量。
函数getLCM(inta,intb)接受两个数字,并通过查找第一个数字(使用while循环可将其均分)来返回它们的LCM。
函数getLCMArray(intarr[],intn)将一个数组及其长度作为输入,并返回该数组所有元素的LCM。
将第一个LCM计算为getLCM(arr[0],arr[1])。之后,通过调用其中i=2至i<n的getLCM(lcm,arr[i])来连续找到先前的lcm和arr[i]中的lcm。
函数divisiblebyArr(intstart,intend,intarr[],intlen)获取范围变量和数组,并返回可被所有数组元素整除的数字计数。
对于此类数字,将初始变量计数设为0。
将变量lcm用作getLCMArray(intarr[],intlen)。
使用for循环遍历数字范围。我=开始我=结束
现在,对于每个数字i,检查它是否可整除lcm。如果为true,则增加计数。
在所有循环的末尾,count将有一个总数,该总数可被数组的所有元素整除。
返回计数结果。
示例
#include <bits/stdc++.h> using namespace std; int getLCM(int a, int b){ int m; m = (a > b) ? a : b; while(true){ if(m % a == 0 && m % b == 0) return m; m++; } } int getLCMArray(int arr[], int n){ int lcm = getLCM(arr[0], arr[1]); for(int i = 2; i < n; i++){ lcm = getLCM(lcm, arr[i]); } return lcm; } int divisiblebyArr(int start, int end, int arr[], int len){ int count = 0; int flag=0; int lcm=getLCMArray(arr,len); for (int i = start; i <= end; i++){ if(i%lcm==0) { count++; } } return count; } int main(){ int START = 5, END = 20; int Arr[] = {2,4,8 }; int len=sizeof(Arr)/sizeof(Arr[0]); cout <<"Numbers that are divisible by all array elements: "<< divisiblebyArr(START,END,Arr,len); return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出-
Numbers that are divisible by all array elements: 2