使((n,i)%j)%n在C ++中最大化的(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。从0到num遍历i,j并找到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循环遍历[1,num]中的i和j。

  • 如果值(((num%i)%j)%num等于总数,则递增计数。

  • 在两个for循环的末尾,返回计数作为结果。

高效方法

获得最大余数为total = num%temp,其中temp是num / 2 + 1。现在,对于对(i,j),我们必须选择i作为num以获得最大余数。我们可以从总数到num的范围内选择j,以使总数成为最大值。因此,对数将为numtotal

在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;

  • 设置计数=总数

  • 最后返回结果。

示例(幼稚的方法)

#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
猜你喜欢