在 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