找出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指最大公除数。
高效的方法。 如果两个数字A和B是共素数,那么它们的和与它们的积是共素数。牢记这一点,找到N的所有因子,对于每个因子d1,计算N的最大因子d2,它与d1是共素数。要计算d2,只需将N 除以 d1,直到N%d1 !=0。最后,检查d1 和 d2是否是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 Nvoid printFactors(int n){// Find factors in sorted orderfor (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-primewhile (d2 % d1 == 0) {d2 = d2 / d1;}// Check if d1 and d2 are proper// factors of Nif (d1 > 1 && d2 > 1) {// Print answercout << d1 <<", " << d2;return;}}}// No such factors existcout << -1;}// Driver codeint main(){int N = 10;// Function CallprintFactors(N);return 0;} |
输出。
2, 5
时间复杂度。 O(√N)
辅助空间。 O(1)
读者请注意!现在不要停止学习。掌握竞争性编程的所有重要数学概念。 CP课程的基本数学以适合学生的价格获得所有重要的数学概念。要完成从学习语言到DS Algo以及更多的准备工作,请参考 完整的面试准备课程.
我的个人笔记 箭头_下降_上升
保存