找出N的两个适当因子,使它们的总和与N共素。

189 阅读2分钟

找出N的两个适当因子,使它们的总和与N共素。

  • 最后更新 : 2021年8月10日

给定一个整数N,你必须找到N的两个适当的因子,使它们的总和与给定的整数N是共素数。

例子。

**输入。**N = 15
**输出。**3, 5
解释。 3和5是15的适当因子,3+5->8是15的共素数。

**输入。**N = 4
输出。 -1
解释: 没有满足条件的适当因子。

**天真的方法。**生成一个N的所有适当因子的列表,对于每一对可能的因子,检查它们的总和是否是N的共素数,即GCD(一对整数的总和,N)=1,这里GCD指最大公除数。

高效的方法。 如果两个数字AB是共素数,那么它们的和与它们的积是共素数。牢记这一点,找到N的所有因子,对于每个因子d1,计算N的最大因子d2,它与d1是共素数。要计算d2,只需将N 除以 d1,直到N%d1 !=0。最后,检查d1d2是否是N的适当因子(即d1>1和d2>1)。

下面是上述方法的实现。

C++

// C++ Program for the above approach
#include <bits/stdc++.h>
using namespace std;
// Function to find two proper
// factors of N such that their
// sum is coprime with N
void printFactors(int n)
{
// Find factors in sorted order
for (int i = 2; i <=sqrt(n); i++) {
if (n % i == 0) {
int d1 = i, d2 = n;
// Find largest value of d2 such
// that d1 and d2 are co-prime
while (d2 % d1 == 0) {
d2 = d2 / d1;
}
// Check if d1 and d2 are proper
// factors of N
if (d1 > 1 && d2 > 1) {
// Print answer
cout << d1 <<", " << d2;
return;
}
}
}
// No such factors exist
cout << -1;
}
// Driver code
int main()
{
int N = 10;
// Function Call
printFactors(N);
return 0;
}

输出。

2, 5

时间复杂度。 O(√N)
辅助空间。 O(1)

读者请注意!现在不要停止学习。掌握竞争性编程的所有重要数学概念。 CP课程的基本数学以适合学生的价格获得所有重要的数学概念。要完成从学习语言到DS Algo以及更多的准备工作,请参考 完整的面试准备课程.

我的个人笔记 箭头_下降_上升

保存