在 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
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP