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

更新于:2019年10月3日

94 次浏览

开启您的职业生涯

完成课程后获得认证

开始学习
广告