在 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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.