使((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(intnum)取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(intnum)取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