C++程序查找最近的整数,其数字与其数字和的最大公约数大于1


假设我们有一个数字N。考虑一个正整数x的函数gcdSum(x),它是该整数与其数字和的最大公约数。我们必须找到最小的整数x >= n,使得gcdSum(x) > 1。

所以,如果输入类似于N = 31,则输出将为33,因为31和(3+1)的最大公约数为1。32和(3+2)的最大公约数为1,33和(3+3)的最大公约数为3。

步骤

要解决这个问题,我们将遵循以下步骤 -

for initialize i := n, when i <= n + 2, update (increase i by 1), do:
   jml := 0
   x := i
   while x > 0, do:
      jml := jml + x mod 10
      x := x / 10
   if gcd of i and jml is not equal to 1, then:
      return i
return 0

示例

让我们看看下面的实现以获得更好的理解 -

#include <bits/stdc++.h>
using namespace std;

int solve(int n) {
   for (long i = n; i <= n + 2; i++) {
      long jml = 0;
      long x = i;
      while (x > 0) {
         jml += x % 10;
         x /= 10;
      }
      if (__gcd(i, jml) != 1) {
         return i;
      }
   }
   return 0;
}
int main() {
   int N = 31;
   cout << solve(N) << endl;
}

输入

31

输出

33

更新于: 2022年3月3日

165次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告