在 C++ 中找到使 ((n % i) % j) % n 最大化的 (i, j) 對的數量


給定一個數字 num 作為輸入。目標是找到 (i,j) 形式的對的數量,使得 ((num%i)%j)%num 最大化,並且 i 和 j 都在 [1,num] 範圍內。

讓我們透過例子來理解

輸入 - num=4

輸出 - 使 ((n % i) % j) % n 最大化的 (i, j) 對的數量為 - 3

解釋 - 對將是:(3,2), (3,3), (3,4)

輸入 - num=6

輸出 - 使 ((n % i) % j) % n 最大化的 (i, j) 對的數量為 - 4

解釋 - 對將是:(4,3), (4,4), (4,5), (4,6)

下面程式中使用的方案如下

我們將使用兩種方案來解決這個問題。在樸素方案中,如果我們有 num 的一半,則可以獲得最大的餘數。設定 temp=num/2 +1。將最大余數設定為 total=num%temp。遍歷 i、j 從 0 到 num,並找到 i、j 使得 ((num % i) % j) % num == total。

  • 將輸入 num 作為整數。

  • 函式 maximized_pair(int num) 獲取 num 並返回 (i, j) 對的數量,使得 ((n % i) % j) % n 最大化。

  • 將初始計數設定為 0。

  • 將 num 減半以獲得最大余數。設定 temp = ((num / 2) + 1)。

  • 計算最大余數為 total = num % temp;

  • 對於對 (i,j)。使用兩個 for 迴圈遍歷 i 和 j 在 [1,num] 範圍內。

  • 如果值 ((num % i) % j) % num 等於 total,則增加計數。

  • 在兩個 for 迴圈結束時,返回計數作為結果。

高效方案

獲取最大余數為 total = num % temp,其中temp 為 num/2+1。現在對於對 (i,j),我們必須選擇 i 為 num 以獲得最大余數。我們可以從 total 到 num 的範圍內選擇 j 以使 total 最大化。因此,對的數量將為num-total

如果 num=2,則返回 4,因為對將是 (1,1), (1,2), (2,1), (2,2),並且不會使用 num-total 計算。

  • 將輸入 num 作為整數。

  • 函式 maximized_pair(int num) 獲取 num 並返回 (i, j) 對的數量,使得 ((n % i) % j) % n 最大化。

  • 將初始計數設定為 0。

  • 如果 num==2,則返回 4。

  • 否則將 num 減半以獲得最大余數。設定 temp = ((num / 2) + 1)。

  • 計算最大余數為 total = num % temp;

  • 設定 count=num-total

  • 最後返回計數作為結果。

示例(樸素方案)

 即時演示

#include<bits/stdc++.h>
using namespace std;
int maximized_pair(int num){
   int count = 0;
   int temp = ((num / 2) + 1);
   int total = num % temp;
   for (int i = 1; i <= num; i++){
      for (int j = 1; j <= num; j++){
         int check = ((num % i) % j) % num;
         if (check == total){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int num = 10;
   cout<<"Count of pairs of (i, j) such that ((n % i) % j) % n is maximized are: "<<maximized_pair(num);
}

輸出

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

Count of pairs of (i, j) such that ((n % i) % j) % n is maximized are: 6

示例(高效方案)

 即時演示

#include<bits/stdc++.h>
using namespace std;
int maximized_pair(int num){
   int count = 0;
   if (num == 2){
      return 4;
   }
   else{
      int temp = ((num / 2) + 1);
      int total = num % temp;
      count = num - total;
   }
   return count;
}
int main(){
   int num = 10;
   cout<<"Count of pairs of (i, j) such that ((n % i) % j) % n is maximized are: "<<maximized_pair(num);
}

輸出

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

Count of pairs of (i, j) such that ((n % i) % j) % n is maximized are: 6

更新於: 2020年12月3日

87 次檢視

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告