给定三个整数a , b和N。找出可以通过从1到a选择一个整数以及从1到b选择另一个整数而形成的不同对的总数,以使它们的和可被N整除。
例子:
Input : a = 4, b = 4, N = 4
Output : 4
Input : a = 5, b = 13, N = 3
Output : 22
基本方法:对于要被N整除的一对,它必须包含一个范围从1到a的数字,另一个范围是1到b。
因此,对于从1到a的整数进行迭代,对于每个整数(i),都存在b / N个数字,这些数字与i的和可被N整除。同样,如果(i%N + b%N)> = N,则存在另外1对,其和可被N整除。
例如,取a = 7,b = 6和N = 4:
Let's check for i = 3:
- b / N = 6/4 = 1 =>从1到b有一个整数,
其3的总和可除以4即(3,1)。 - 另外i%N + b%N = 3%4 + 6%4 = 3 + 2 = 5> 4,
表示从1到b还有一个整数
其与3的和可以除以4即(3,5)。
下面是上述方法的实现:
C++
// C++ implementation of above approach
#include
using namespace std;
// Function to find the distinct pairs from
// 1-a & 1-b such that their sum is divisible by n.
int findCountOfPairs(int a, int b, int n)
{
int ans = 0;
// Iterate over 1 to a to find distinct pairs
for (int i = 1; i <= a; i++) {
// For each integer from 1 to a
// b/n integers exists such that pair
// sum is divisible by n
ans += b / n;
// If (i%n +b%n ) >= n one more pair is possible
ans += (i % n + b % n) >= n ? 1 : 0;
}
// Return answer
return ans;
}
// Driver code
int main()
{
int a = 5, b = 13, n = 3;
cout << findCountOfPairs(a, b, n);
return 0;
}
Java
// Java program for the above approach
class GFG
{
// Function to find the distinct pairs from
// 1-a & 1-b such that their sum is divisible by n.
static int findCountOfPairs(int a, int b, int n)
{
int ans = 0;
// Iterate over 1 to a to find distinct pairs
for (int i = 1; i <= a; i++)
{
// For each integer from 1 to a
// b/n integers exists such that pair
// sum is divisible by n
ans += b / n;
// If (i%n +b%n ) >= n one more pair is possible
ans += (i % n + b % n) >= n ? 1 : 0;
}
// Return answer
return ans;
}
// Driver code
public static void main(String[] args)
{
int a = 5, b = 13, n = 3;
System.out.println(findCountOfPairs(a, b, n));
}
}
// This code has been contributed by 29AjayKumar
Python3
# Python implementation of above approach
# Function to find the distinct pairs from
# 1-a & 1-b such that their sum is divisible by n.
def findCountOfPairs(a, b, n):
ans = 0
for i in range(1, a + 1):
# For each integer from 1 to a
# b/n integers exists such that pair
# / sum is divisible by n
ans += b//n
# If (i%n +b%n ) >= n one more pair is possible
ans += 1 if (i % n + b % n) >= n else 0
return ans
# Driver code
a = 5; b = 13; n = 3
print(findCountOfPairs(a, b, n))
# This code is contributed by Shrikant13
C#
// C# program for the above approach
using System;
class GFG
{
// Function to find the distinct pairs from
// 1-a & 1-b such that their sum is divisible by n.
static int findCountOfPairs(int a, int b, int n)
{
int ans = 0;
// Iterate over 1 to a to find distinct pairs
for (int i = 1; i <= a; i++)
{
// For each integer from 1 to a
// b/n integers exists such that pair
// sum is divisible by n
ans += b / n;
// If (i%n +b%n ) >= n one more pair is possible
ans += (i % n + b % n) >= n ? 1 : 0;
}
// Return answer
return ans;
}
// Driver code
static public void Main ()
{
int a = 5, b = 13, n = 3;
Console.WriteLine(findCountOfPairs(a, b, n));
}
}
// This code has been contributed by ajit.
PHP
= n one more
// pair is possible
$ans += (($i % $n ) +
($b % $n)) >= $n ? 1 : 0;
}
// Return answer
return $ans;
}
// Driver code
$a = 5;
$b = 13;
$n = 3;
echo findCountOfPairs($a, $b, $n);
// This code is contributed by akt_mit.
?>
Javascript
C++
// C++ implementation of above approach
#include
using namespace std;
// Function to find the distinct pairs from
// 1-a & 1-b such that their sum is divisible by n.
int findCountOfPairs(int a, int b, int n)
{
if (a > b)
{
// if first element is bigger then swap
swap(a, b);
}
int temp = 1, count = 0;
// count is store the number of pair.
for (int i = n; temp > 0; i += n)
{
// we use temp for breking a loop.
if (a >= i)
{
// count when a is greter.
temp = i - 1;
}
else if (b >= i)
{
// Count when a is smaller but
// b is grater
temp = a;
}
else if (i > b)
{
// Count when a and b both are smaller
temp = a - (i - b) + 1;
}
if (temp > 0) //breaking condition
{
// For storing The pair in count.
count += temp;
}
}
// return the number of pairs.
return count;
}
// Driver code
int main()
{
int a = 5, b = 13, n = 3;
cout << findCountOfPairs(a, b, n);
return 0;
}
// contribute by Vivek Javiya
Java
// Java implementation of
// the above approach
class GFG{
// Function to find the
// distinct pairs from
// 1-a & 1-b such that
// their sum is divisible by n.
public static int findCountOfPairs(int a,
int b,
int n)
{
if (a > b)
{
// if first element is
// bigger then swap
int temp = a;
a = b;
b = temp;
}
int temp = 1, count = 0;
// count is store the
// number of pair.
for (int i = n; temp > 0; i += n)
{
// we use temp for
// breaking a loop.
if (a >= i)
{
// count when a
// is greter.
temp = i - 1;
}
else if (b >= i)
{
// Count when a is
// smaller but
// b is grater
temp = a;
}
else if (i > b)
{
// Count when a and b
// both are smaller
temp = a - (i - b) + 1;
}
//breaking condition
if (temp > 0)
{
// For storing The
// pair in count.
count += temp;
}
}
// return the number
// of pairs.
return count;
}
// Driver code
public static void main(String[] args)
{
int a = 5, b = 13, n = 3;
System.out.print(findCountOfPairs(a,
b, n));
}
}
// This code is contributed by divyeshrabadiya07
Python3
# Python implementation of above approach
# Function to find the distinct pairs from
# 1-a & 1-b such that their sum is divisible by n.
def findCountOfPairs(a, b, n):
if(a > b):
# if first element is bigger then swap
a, b = b, a
temp = 1
count = 0
# count is store the number of pair.
i = n
while(temp > 0):
# we use temp for breking a loop.
if(a >= i):
# count when a is greter.
temp = i - 1
elif(b >= i):
# Count when a is smaller but
# b is grater
temp = a
elif(i > b):
# Count when a and b both are smaller
temp = a - (i - b) + 1
if(temp > 0):
# breaking condition
# For storing The pair in count.
count += temp
i += n
# return the number of pairs.
return count
# Driver code
a = 5
b = 13
n = 3
print(findCountOfPairs(a, b, n))
# This code is contributed by avanitrachhadiya2155
C#
// C# implementation of
// the above approach
using System;
class GFG
{
// Function to find the
// distinct pairs from
// 1-a & 1-b such that
// their sum is divisible by n.
static int findCountOfPairs(int a, int b, int n)
{
if (a > b)
{
// if first element is
// bigger then swap
int temp1 = a;
a = b;
b = temp1;
}
int temp = 1, count = 0;
// count is store the
// number of pair.
for (int i = n; temp > 0; i += n)
{
// we use temp for
// breaking a loop.
if (a >= i)
{
// count when a
// is greter.
temp = i - 1;
}
else if (b >= i)
{
// Count when a is
// smaller but
// b is grater
temp = a;
}
else if (i > b)
{
// Count when a and b
// both are smaller
temp = a - (i - b) + 1;
}
// breaking condition
if (temp > 0)
{
// For storing The
// pair in count.
count += temp;
}
}
// return the number
// of pairs.
return count;
}
// Driver code
static void Main()
{
int a = 5, b = 13, n = 3;
Console.WriteLine(findCountOfPairs(a, b, n));
}
}
// This code is contributed by divyesh072019
Javascript
C++
// C++ implementation of above approach
#include
using namespace std;
// Function to find the distinct pairs from
// 1-a & 1-b such that their sum is divisible by n.
int findCountOfPairs(int a, int b, int n)
{
int ans = 0;
// pairs from 1 to n*(a/n) and 1 to n*(b/n)
ans += n * (a / n) * (b / n);
// pairs from 1 to n*(a/n) and n*(b/n) to b
ans += (a / n) * (b % n);
// pairs from n*(a/n) to a and 1 to n*(b/n)
ans += (a % n) * (b / n);
// pairs from n*(a/n) to a and n*(b/n) to b
ans += ((a % n) + (b % n)) / n;
// Return answer
return ans;
}
// Driver code
int main()
{
int a = 5, b = 13, n = 3;
cout << findCountOfPairs(a, b, n);
return 0;
}
Java
// Java implementation of above approach
import java.io.*;
class GFG
{
// Function to find the distinct pairs from
// 1-a & 1-b such that their sum is divisible by n.
static int findCountOfPairs(int a, int b, int n)
{
int ans = 0;
// pairs from 1 to n*(a/n) and 1 to n*(b/n)
ans += n * (a / n) * (b / n);
// pairs from 1 to n*(a/n) and n*(b/n) to b
ans += (a / n) * (b % n);
// pairs from n*(a/n) to a and 1 to n*(b/n)
ans += (a % n) * (b / n);
// pairs from n*(a/n) to a and n*(b/n) to b
ans += ((a % n) + (b % n)) / n;
// Return answer
return ans;
}
// Driver code
public static void main (String[] args)
{
int a = 5, b = 13, n = 3;
System.out.println (findCountOfPairs(a, b, n));
}
}
// This code is contributed by ajit..
Python3
# Python 3 implementation of above approach
# Function to find the distinct pairs from
# 1-a & 1-b such that their sum is divisible by n.
def findCountOfPairs(a, b, n):
ans = 0
# pairs from 1 to n*(a/n) and 1 to n*(b/n)
ans += n * int(a / n) * int(b / n)
# pairs from 1 to n*(a/n) and n*(b/n) to b
ans += int(a / n) * (b % n)
# pairs from n*(a/n) to a and 1 to n*(b/n)
ans += (a % n) * int(b / n)
# pairs from n*(a/n) to a and n*(b/n) to b
ans += int(((a % n) + (b % n)) / n);
# Return answer
return ans
# Driver code
if __name__ == '__main__':
a = 5
b = 13
n = 3
print(findCountOfPairs(a, b, n))
# This code is contributed by
# Surendra_Gangwar
C#
// C# implementation of above approach
using System;
class GFG
{
// Function to find the distinct pairs from
// 1-a & 1-b such that their sum is divisible by n.
static int findCountOfPairs(int a, int b, int n)
{
int ans = 0;
// pairs from 1 to n*(a/n) and 1 to n*(b/n)
ans += n * (a / n) * (b / n);
// pairs from 1 to n*(a/n) and n*(b/n) to b
ans += (a / n) * (b % n);
// pairs from n*(a/n) to a and 1 to n*(b/n)
ans += (a % n) * (b / n);
// pairs from n*(a/n) to a and n*(b/n) to b
ans += ((a % n) + (b % n)) / n;
// Return answer
return ans;
}
// Driver code
static public void Main (){
int a = 5, b = 13, n = 3;
Console.WriteLine(findCountOfPairs(a, b, n));
}
}
// This code is contributed by @Tushil
PHP
Javascript
输出:
22
时间复杂度:O(N)
第二种方法:-这种方法有点棘手。在这里,我们找到N的倍数为多少。
首先:-保留(a
第二:-从N的最低倍数开始for循环,然后遍历该倍数。
- 现在最小元素(a)大于或等于当前倍数,然后将((Current_Multiple)– 1)对添加到ans。
- 现在a较小,但b大于或等于当前倍数,而不是我们将an加到ans上。
- 现在,如果a和b均小于我们计算的剩余对,则添加– –(current_multiple – b)+ 1。
- 打破循环。
以下是上述逻辑的实现。
C++
// C++ implementation of above approach
#include
using namespace std;
// Function to find the distinct pairs from
// 1-a & 1-b such that their sum is divisible by n.
int findCountOfPairs(int a, int b, int n)
{
if (a > b)
{
// if first element is bigger then swap
swap(a, b);
}
int temp = 1, count = 0;
// count is store the number of pair.
for (int i = n; temp > 0; i += n)
{
// we use temp for breking a loop.
if (a >= i)
{
// count when a is greter.
temp = i - 1;
}
else if (b >= i)
{
// Count when a is smaller but
// b is grater
temp = a;
}
else if (i > b)
{
// Count when a and b both are smaller
temp = a - (i - b) + 1;
}
if (temp > 0) //breaking condition
{
// For storing The pair in count.
count += temp;
}
}
// return the number of pairs.
return count;
}
// Driver code
int main()
{
int a = 5, b = 13, n = 3;
cout << findCountOfPairs(a, b, n);
return 0;
}
// contribute by Vivek Javiya
Java
// Java implementation of
// the above approach
class GFG{
// Function to find the
// distinct pairs from
// 1-a & 1-b such that
// their sum is divisible by n.
public static int findCountOfPairs(int a,
int b,
int n)
{
if (a > b)
{
// if first element is
// bigger then swap
int temp = a;
a = b;
b = temp;
}
int temp = 1, count = 0;
// count is store the
// number of pair.
for (int i = n; temp > 0; i += n)
{
// we use temp for
// breaking a loop.
if (a >= i)
{
// count when a
// is greter.
temp = i - 1;
}
else if (b >= i)
{
// Count when a is
// smaller but
// b is grater
temp = a;
}
else if (i > b)
{
// Count when a and b
// both are smaller
temp = a - (i - b) + 1;
}
//breaking condition
if (temp > 0)
{
// For storing The
// pair in count.
count += temp;
}
}
// return the number
// of pairs.
return count;
}
// Driver code
public static void main(String[] args)
{
int a = 5, b = 13, n = 3;
System.out.print(findCountOfPairs(a,
b, n));
}
}
// This code is contributed by divyeshrabadiya07
Python3
# Python implementation of above approach
# Function to find the distinct pairs from
# 1-a & 1-b such that their sum is divisible by n.
def findCountOfPairs(a, b, n):
if(a > b):
# if first element is bigger then swap
a, b = b, a
temp = 1
count = 0
# count is store the number of pair.
i = n
while(temp > 0):
# we use temp for breking a loop.
if(a >= i):
# count when a is greter.
temp = i - 1
elif(b >= i):
# Count when a is smaller but
# b is grater
temp = a
elif(i > b):
# Count when a and b both are smaller
temp = a - (i - b) + 1
if(temp > 0):
# breaking condition
# For storing The pair in count.
count += temp
i += n
# return the number of pairs.
return count
# Driver code
a = 5
b = 13
n = 3
print(findCountOfPairs(a, b, n))
# This code is contributed by avanitrachhadiya2155
C#
// C# implementation of
// the above approach
using System;
class GFG
{
// Function to find the
// distinct pairs from
// 1-a & 1-b such that
// their sum is divisible by n.
static int findCountOfPairs(int a, int b, int n)
{
if (a > b)
{
// if first element is
// bigger then swap
int temp1 = a;
a = b;
b = temp1;
}
int temp = 1, count = 0;
// count is store the
// number of pair.
for (int i = n; temp > 0; i += n)
{
// we use temp for
// breaking a loop.
if (a >= i)
{
// count when a
// is greter.
temp = i - 1;
}
else if (b >= i)
{
// Count when a is
// smaller but
// b is grater
temp = a;
}
else if (i > b)
{
// Count when a and b
// both are smaller
temp = a - (i - b) + 1;
}
// breaking condition
if (temp > 0)
{
// For storing The
// pair in count.
count += temp;
}
}
// return the number
// of pairs.
return count;
}
// Driver code
static void Main()
{
int a = 5, b = 13, n = 3;
Console.WriteLine(findCountOfPairs(a, b, n));
}
}
// This code is contributed by divyesh072019
Java脚本
输出 :
22
高效方法:为了有效地解决问题,将问题分为四个部分,并按以下方式解决:
- 从1到N *(a / N)范围内的每个整数将具有从1到N *(b / N)的b / N个整数,它们的和可被N整除。
- 存在范围为1到N *(a / N)的a / N整数,可以与b%N整数形成对,范围为N *(b / N)到b。
- 存在范围为N *(a / N)到a的a%N个整数,它们可以形成b / N整数,范围为1到N *(b / N)的对。
- 从范围N *(a / N)到a和从N *(b / N)到b存在(a%N + b%N)/ N个整数,它们可以形成对,其和可被N整除。
下面是上述方法的实现:
C++
// C++ implementation of above approach
#include
using namespace std;
// Function to find the distinct pairs from
// 1-a & 1-b such that their sum is divisible by n.
int findCountOfPairs(int a, int b, int n)
{
int ans = 0;
// pairs from 1 to n*(a/n) and 1 to n*(b/n)
ans += n * (a / n) * (b / n);
// pairs from 1 to n*(a/n) and n*(b/n) to b
ans += (a / n) * (b % n);
// pairs from n*(a/n) to a and 1 to n*(b/n)
ans += (a % n) * (b / n);
// pairs from n*(a/n) to a and n*(b/n) to b
ans += ((a % n) + (b % n)) / n;
// Return answer
return ans;
}
// Driver code
int main()
{
int a = 5, b = 13, n = 3;
cout << findCountOfPairs(a, b, n);
return 0;
}
Java
// Java implementation of above approach
import java.io.*;
class GFG
{
// Function to find the distinct pairs from
// 1-a & 1-b such that their sum is divisible by n.
static int findCountOfPairs(int a, int b, int n)
{
int ans = 0;
// pairs from 1 to n*(a/n) and 1 to n*(b/n)
ans += n * (a / n) * (b / n);
// pairs from 1 to n*(a/n) and n*(b/n) to b
ans += (a / n) * (b % n);
// pairs from n*(a/n) to a and 1 to n*(b/n)
ans += (a % n) * (b / n);
// pairs from n*(a/n) to a and n*(b/n) to b
ans += ((a % n) + (b % n)) / n;
// Return answer
return ans;
}
// Driver code
public static void main (String[] args)
{
int a = 5, b = 13, n = 3;
System.out.println (findCountOfPairs(a, b, n));
}
}
// This code is contributed by ajit..
Python3
# Python 3 implementation of above approach
# Function to find the distinct pairs from
# 1-a & 1-b such that their sum is divisible by n.
def findCountOfPairs(a, b, n):
ans = 0
# pairs from 1 to n*(a/n) and 1 to n*(b/n)
ans += n * int(a / n) * int(b / n)
# pairs from 1 to n*(a/n) and n*(b/n) to b
ans += int(a / n) * (b % n)
# pairs from n*(a/n) to a and 1 to n*(b/n)
ans += (a % n) * int(b / n)
# pairs from n*(a/n) to a and n*(b/n) to b
ans += int(((a % n) + (b % n)) / n);
# Return answer
return ans
# Driver code
if __name__ == '__main__':
a = 5
b = 13
n = 3
print(findCountOfPairs(a, b, n))
# This code is contributed by
# Surendra_Gangwar
C#
// C# implementation of above approach
using System;
class GFG
{
// Function to find the distinct pairs from
// 1-a & 1-b such that their sum is divisible by n.
static int findCountOfPairs(int a, int b, int n)
{
int ans = 0;
// pairs from 1 to n*(a/n) and 1 to n*(b/n)
ans += n * (a / n) * (b / n);
// pairs from 1 to n*(a/n) and n*(b/n) to b
ans += (a / n) * (b % n);
// pairs from n*(a/n) to a and 1 to n*(b/n)
ans += (a % n) * (b / n);
// pairs from n*(a/n) to a and n*(b/n) to b
ans += ((a % n) + (b % n)) / n;
// Return answer
return ans;
}
// Driver code
static public void Main (){
int a = 5, b = 13, n = 3;
Console.WriteLine(findCountOfPairs(a, b, n));
}
}
// This code is contributed by @Tushil
的PHP
Java脚本
输出:
22
时间复杂度: O(1)