计算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(int start,int end,int arr [],int len)获取范围变量和数组,并返回可被所有数组元素整除的数字计数。

  • 对于此类数字,将初始变量计数设为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(int a,int b)接受两个数字,并通过查找第一个数字(使用while循环可将其均分)来返回它们的LCM。

  • 函数getLCMArray(int arr [],int n)将一个数组及其长度作为输入,并返回该数组所有元素的LCM。

  • 将第一个LCM计算为getLCM(arr [0],arr [1])。之后,通过调用其中i = 2至i <n的getLCM(lcm,arr [i])来连续找到先前的lcm和arr [i]中的lcm。

  • 函数divisiblebyArr(int start,int end,int arr [],int len)获取范围变量和数组,并返回可被所有数组元素整除的数字计数。

  • 对于此类数字,将初始变量计数设为0。

  • 将变量lcm用作getLCMArray(int arr [],int len)。

  • 使用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