Giả sử chúng ta có một số N. Xét một hàm gcdSum (x) của một số nguyên dương x là gcd của số nguyên đó với tổng các chữ số của nó. Chúng ta phải tìm số nguyên nhỏ nhất x> =n, sao cho gcdSum (x)> 1.
Vì vậy, nếu đầu vào là N =31, thì đầu ra sẽ là 33, vì gcd của 31 và (3 + 1) là 1. Gcd của 32 và (3 + 2) là 1 và gcd của 33 và ( 3 + 3) là 3.
Các bước
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
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
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#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; }
Đầu vào
31
Đầu ra
33