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
广告