在 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