使用 C++ 計算將給定數字 N 減少到 0 所需的操作次數


給定一個正整數 N。目標是找到將 N 減少到 0 所需的操作次數。應用的操作是 N=N-P,其中 P 是 P 的最小素數因子。

讓我們透過例子來理解

輸入 − N=17

輸出 − 將 N 減少到 0 所需的操作次數為 1

說明 − 17 的最小素數因子是 17 本身。因此,該操作只應用一次 17-17=0。

輸入 − N=20

輸出− 將 N 減少到 0 所需的操作次數為 10

說明 − 20 的最小素數因子是 2。重複減去 2 並找到下一個素數因子。

20%2==0, 20-2=18
18%2==0, 18-2=16
…………………..14, 12, 10, 8, 6, 4, 2, 0 Total 10 times the operation is applied.

下面程式中使用的方法如下:

對於所有偶數 N,最小素數因子始終為 2,從偶數 N 中減去 2 將再次產生偶數。對於所有奇數,最小素數因子將是奇數,從奇數中減去奇數後,數字將變成偶數,因此 2 將再次成為最小素數因子。要找到最小素數因子,從 i=2 開始遍歷到 i,使得 i*i<N 且 N%i==0。然後總操作次數將為 count=1 + (N-i)/2。

  • 輸入一個整數 N。

  • 函式 N_to_Zero(int N) 獲取 N 並返回將 N 減少到 0 所需的操作次數。

  • 將計數的初始值設定為 0。

  • 從 i=2 開始。開始遍歷 while (i*i)<N 且 N 不能被 i 整除 (N%i!=0)。遞增 i。

  • 如果 (i*i) 超過 N,則設定 i=N。

  • 操作次數將為 1+(N-i)/2。

  • 將計數設定為 1+(N-i)/2。

  • 返回計數作為結果。

示例

 線上演示

#include<bits/stdc++.h>
using namespace std;
int N_to_Zero(int N){
   int count = 0;
   int i = 2;
   while((i * i) < N && (N % i)){
      i++;
   }
   if((i * i) > N){
      i = N;
   }
   count = 1 + (N-i)/2;
   return count;
}
int main(){
   int N = 10;
   cout<<"Count of operations of the given type required to reduce N to 0 are: "<<N_to_Zero(N);
   return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

Count of operations of the given type required to reduce N to 0 are: 5

更新於:2020-12-02

702 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.