给定正整数N ,任务是找到平方差等于N的整数对(x,y)的数量,即
例子:
Input: N = 20
Output: 4
Explanation:
The 4 possible pairs are (10, 2), (-10, 2), (-10, -2) and (10, -2).
Input: N = 80
Output: 12
Explanation:
The 12 possible pairs are:
1. (40, 2), (-40, 2), (-40, -2) and (40, -2).
2. (20, 4), (-20, 4), (-20, -4) and (20, -4).
3. (10, 8), (-10, 8), (-10, -8) and (10, -8).
方法:
给定的等式也可以写成:
=>
=>
现在对于给定方程的积分解:
(x+y)(x-y)
is always an integer
=> (x+y)(x-y)
are divisors of N
令(x + y)= p1和(x + y)= p2
是两个方程,其中p1和p2是N的因数
这样p1 * p2 = N。
解决以上两个方程式,我们有:
=>
and
根据以上计算,要使x和y为整数,则除数之和必须为偶数。由于x和y的两个值有(+ x,+ y),(+ x,-y),(-x,+ y)和(-x,-y)有4个可能值。
因此,可能的解决方案总数由4 *(成对的偶数个除数对)得出。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to find the integral
// solutions of the given equation
void findSolutions(int N)
{
// Initialise count to 0
int count = 0;
// Iterate till sqrt(N)
for (int i = 1; i <= sqrt(N); i++) {
if (N % i == 0) {
// If divisor's pair sum is even
if ((i + N / i) % 2 == 0) {
count++;
}
}
}
// Print the total possible solutions
cout << 4 * count << endl;
}
// Driver Code
int main()
{
// Given number N
int N = 80;
// Function Call
findSolutions(N);
return 0;
}
Java
// Java program for the above approach
import java.util.*;
class GFG{
// Function to find the integral
// solutions of the given equation
static void findSolutions(int N)
{
// Initialise count to 0
int count = 0;
// Iterate till sqrt(N)
for(int i = 1; i <= Math.sqrt(N); i++)
{
if (N % i == 0)
{
// If divisor's pair sum is even
if ((i + N / i) % 2 == 0)
{
count++;
}
}
}
// Print the total possible solutions
System.out.print(4 * count);
}
// Driver code
public static void main(String[] args)
{
// Given number N
int N = 80;
// Function Call
findSolutions(N);
}
}
// This code is contributed by Shubham Prakash.
Python3
# Python3 program for the above approach
import math;
# Function to find the integral
# solutions of the given equation
def findSolutions(N):
# Initialise count to 0
count = 0;
# Iterate till sqrt(N)
for i in range(1, int(math.sqrt(N)) + 1):
if (N % i == 0):
# If divisor's pair sum is even
if ((i + N // i) % 2 == 0):
count += 1;
# Print the total possible solutions
print(4 * count);
# Driver Code
# Given number N
N = 80;
# Function Call
findSolutions(N);
# This code is contributed by Code_Mech
C#
// C# program for the above approach
using System;
class GFG{
// Function to find the integral
// solutions of the given equation
static void findSolutions(int N)
{
// Initialise count to 0
int count = 0;
// Iterate till sqrt(N)
for(int i = 1; i <= Math.Sqrt(N); i++)
{
if (N % i == 0)
{
// If divisor's pair sum is even
if ((i + N / i) % 2 == 0)
{
count++;
}
}
}
// Print the total possible solutions
Console.Write(4 * count);
}
// Driver code
public static void Main(String[] args)
{
// Given number N
int N = 80;
// Function Call
findSolutions(N);
}
}
// This code is contributed by sapnasingh4991
Javascript
12
时间复杂度: O(sqrt(N))