在 C++ 中统计小于 N 且具有与 K 相同除数个数的数字


给定两个数字 N 和 K。目标是在 1 到 N 之间找到具有与 K 在范围 [1,N] 内相同除数个数的数字的个数。

我们首先统计 K 在范围 [1,N] 内的除数,并存储在变量 count 中。

现在我们将从 i=1 开始到 i=N。现在对于每个数字 num=i(使得 i!=K),统计 num 在范围[1,N]内的除数。并将它们的出现次数存储在变量 divisors 中。

如果 divisors=count,表示 num 在范围 [1,N] 内具有与 K 相同的除数。增加此类数字的计数。

让我们通过示例来理解。

输入 − N=5, K=2

输出 − 小于 N 且具有与 K 相同除数个数的数字的个数 − 1

解释

Between 1 and 5, 2 has divisors 1,2 only. count=2
1 has only 1 divisor which is 1
3 has divisors 1,3 → 2
4 has divisors 1,2,4 → 3
1 number 3 has 2 divisors like K=2.

输入 − N=15, K=10

输出 − 小于 N 且具有与 K 相同除数个数的数字的个数 − 3

解释

Between 1 and 15, 10 has divisors 1,10 only. count=2
Similarly 6, 8, 14 have only 2 divisors.

下面程序中使用的步骤如下

  • 我们将 N 和 K 作为整数。

  • 函数 countDivisibles(int n, int k,) 以 N 和 K 作为参数,并返回小于 N 且具有与 K 相同除数个数的数字的个数。

  • 将初始计数设为 0。对于 k 的小于 n 的除数个数。

  • 将初始 numcount 设为 0。对于具有与 k 相同除数的数字。

  • 使用 for 循环,从 i=1 开始到 i<n。如果 k%i==0,则递增 count。

  • 现在 count 包含小于 n 的 k 的除数个数

  • 再次使用 for 循环,从 i=1 开始到 i<n。对于每个 num=i(它不等于 k),将除数的初始计数作为变量 divisors,其值为 0。

  • 现在在 i=1 和 i<n 之间查找 num%i==0,如果是,则递增 divisors。最后,divsors 将包含小于 n 的 num 的除数个数。

  • 检查 divisors 是否等于 count。如果为真,则递增变量 numcount,该变量存储小于 n 且具有与 k 相同除数个数的数字的个数。

  • 在两个循环结束时,返回 numcount 作为结果。

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
int countDivisibles(int n, int k){
   int count = 0;
   int numcount=0;
   for (int i = 1; i < n;i++ ){
      if (k % i == 0)
         { count++; }
   }
   //now count has number of divisors of k
   // cout<<count<<endl;
   for(int i=1;i<n;i++){
      int num;
      if(i!=k){
         num=i;
         int divisors=0;
         for(int j=1;j<n;j++){
            if(num%j==0)
               { divisors++; }
         }
         //cout<<endl<<num<<" "<<divisors;
         if(divisors==count)
            { numcount++; }
         }
      }
   return numcount;
}
int main(){
   int N = 50, K = 6;
   cout<<endl<<"Numbers < N which have equal divisors as K:"<<countDivisibles(N,K);
   return 0;
}

输出

如果我们运行以上代码,它将生成以下输出:

Numbers < N which have equal divisors as K:14

更新于: 2020-08-29

141 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告