C++程序,查找每个元素小于等于N的唯一数对
在本文中,我们将讨论一个程序,该程序用于查找元素小于等于 N 的唯一数对,并遵循某些条件:
两个数字之间差的平方必须等于这两个数字的最小公倍数。
这两个数字的最大公约数可以表示为任意两个连续数字的乘积。
解决此问题的最佳方法是从 1 开始取两个连续的数字,并找到这些数字乘积的倍数。然后,在这些倍数中,为了指定一对数字,我们需要检查这对数字是否满足第一个给定的条件。
例如,考虑 2 和 3 的情况。它们的乘积是 6。现在,如果我们继续使用 6 的倍数,我们将得到 6、12、18、24……一次取两个数字,我们检查两个连续数字之间差的平方(在这种情况下为 36)是否等于这些数字的最小公倍数。最终,我们得到这对数字为 12 和 18。
概括方程,我们得到这两个数字为 Z * (Z*(Z+1)) 和 (Z+1) * (Z*(Z+1)),其中 Z 是最大公约数(连续对乘积)中的第一个数字。
最后,使用值应小于 N 的条件,我们得到
(Z+1) * (Z*(Z+1)) <= N 或 Z³ + (2*Z²) + Z <= N。
示例
#include <iostream> using namespace std; int main() { int N = 489, pairs, i = 1; //counting the number of pairs having elements less than N while((i*i*i) + (2*i*i) + i <= N) { i++; } pairs = i; cout << "Pairs :" << endl; //printing the two elements of the pair for(int j = 1; j < pairs; j++) { cout << j*(j*(j+1)) << " " << (j+1)*(j*(j+1)) << endl; } return 0; }
输出
Pairs : 2 4 12 18 36 48 80 100 150 180 252 294 392 448
广告