给定两个数字a和b,求出所有x,使得%x = b。
例子:
Input : a = 21, b = 5
Output : 2
The answers of the Modular Equation are
8 and 16 since 21 % 8 = 21 % 16 = 5 .
这里出现3种情况:
- 如果(a 则没有答案。
- 如果(a = b),那么所有大于a的数字都是答案,因此将有无限可能的解决方案。
- 如果(a> b)假设x是我们方程的答案。然后x除以(a – b)。同样由于a%x = b,所以b
O(sqrt(ab))中求解。这里只有一种情况出现,当(ab)是理想平方时,我们必须分开处理,然后我们将其平方根加两次,因此,如果出现这种情况,我们必须减去一次。
C++
// C++ program to find x such that a % x is equal
// to b.
#include
using namespace std;
void modularEquation(int a, int b)
{
// if a is less than b then no solution
if (a < b) {
cout << "No solution possible " << endl;
return;
}
// if a is equal to b then every number
// greater than a will be the solution
// so its infinity
if (a == b) {
cout << "Infinite Solution possible " << endl;
return;
}
// all resultant number should be greater than
// b and (a-b) should be divisible by resultant
// number
// count variable store the number of values
// possible
int count = 0;
int n = a - b;
int y = sqrt(a - b);
for (int i = 1; i <= y; ++i) {
if (n % i == 0) {
// checking for both divisor and quotient
// whether they divide ( a-b ) completely
// and greater than b .
if (n / i > b)
count++;
if (i > b)
count++;
}
}
// Here y is added twice in the last iteration
// so 1 y should be decremented to get correct
// solution
if (y * y == n && y > b)
count--;
cout << count << endl;
}
// Driver code
int main()
{
int a = 21, b = 5;
modularEquation(a, b);
return 0;
}
Java
// Java program to find x such that
// a % x is equal to b.
import java.io.*;
class GFG {
static void modularEquation(int a, int b)
{
// if a is less than b then no solution
if (a < b) {
System.out.println("No solution possible ");
return;
}
// if a is equal to b then every number
// greater than a will be the solution
// so its infinity
if (a == b) {
System.out.println("Infinite Solution possible ");
return;
}
// all resultant number should be greater
// than b and (a-b) should be divisible
// by resultant number
// count variable store the number of
// values possible
int count = 0;
int n = a - b;
int y = (int)Math.sqrt(a - b);
for (int i = 1; i <= y; ++i) {
if (n % i == 0) {
// checking for both divisor and
// quotient whether they divide
// ( a-b ) completely and
// greater than b .
if (n / i > b)
count++;
if (i > b)
count++;
}
}
// Here y is added twice in the last
// iteration so 1 y should be decremented
// to get correct solution
if (y * y == n && y > b)
count--;
System.out.println(count);
}
// Driver code
public static void main(String[] args)
{
int a = 21, b = 5;
modularEquation(a, b);
}
}
// This code is contributed by Prerna Saini
Python3
# Python3 program to find x such
# that a % x is equal to b.
import math
def modularEquation(a, b) :
# if a is less than b then no solution
if (a < b) :
print("No solution possible ")
return
# if a is equal to b then every number
# greater than a will be the solution
# so its infinity
if (a == b) :
print("Infinite Solution possible ")
return
# all resultant number should be
# greater than b and (a-b) should
# be divisible by resultant number
# count variable store the number
# of values possible
count = 0
n = a - b
y = (int)(math.sqrt(a - b))
for i in range(1, y+1) :
if (n % i == 0) :
# checking for both divisor
# and quotient whether they
# divide ( a-b ) completely
# and greater than b .
if (n / i > b) :
count = count + 1
if (i > b) :
count = count + 1
# Here y is added twice in the
# last iteration so 1 y should be
# decremented to get correct
# solution
if (y * y == n and y > b) :
count = count - 1
print (count)
# Driver code
a = 21
b = 5
modularEquation(a, b)
# This code is contributed by Nikita Tiwari.
C#
// C# program to find x such that
// a % x is equal to b.
using System;
class GFG {
static void modularEquation(int a, int b)
{
// if a is less than b then no solution
if (a < b) {
Console.WriteLine("No solution possible ");
return;
}
// if a is equal to b then every number
// greater than a will be the solution
// so its infinity
if (a == b) {
Console.WriteLine("Infinite Solution possible ");
return;
}
// all resultant number should be greater
// than b and (a-b) should be divisible
// by resultant number
// count variable store the number of
// values possible
int count = 0;
int n = a - b;
int y = (int)Math.Sqrt(a - b);
for (int i = 1; i <= y; ++i) {
if (n % i == 0) {
// checking for both divisor and
// quotient whether they divide
// ( a-b ) completely and
// greater than b .
if (n / i > b)
count++;
if (i > b)
count++;
}
}
// Here y is added twice in the last
// iteration so 1 y should be decremented
// to get correct solution
if (y * y == n && y > b)
count--;
Console.WriteLine(count);
}
// Driver code
public static void Main()
{
int a = 21, b = 5;
modularEquation(a, b);
}
}
//This code is contributed by vt_m.
PHP
$b)
$count++;
if ($i > $b)
$count++;
}
}
// Here y is added twice
// in the last iteration
// so 1 y should be
// decremented to get correct
// solution
if ($y * $y == $n && $y > $b)
$count--;
echo $count ;
}
// Driver Code
$a = 21;
$b = 5;
modularEquation($a, $b);
// This code is contributed by anuj_67.
?>
Javascript
输出:
2