题意:
- 定义 gcdSum(x) 为 x 和 x 的数位和的gcd,给定 n,求大于等于 n 的数且 gcdSum > 1 的第一个的数。
-
1
≤
t
≤
1000
1 ≤ t ≤ 1000
1≤t≤1000,
1
≤
n
≤
1
0
18
1 ≤ n ≤ 10^{18}
1≤n≤1018
思路:
- 性质:数位和性质,如果一个数是 3 的倍数,那么他的数位和也是 3 的倍数,因此,n、n + 1、n + 2 其中一个数一定满足条件。
AC Code:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b) {
return b ? gcd(b, a % b) : a;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t;
cin >> t;
while (t--) {
ll n;
cin >> n;
while (1) {
ll x = n;
ll sum = 0;
while (x > 0) {
sum += x % 10;
x /= 10;
}
if (gcd(sum, n) > 1) {
cout << n << '\n';
break;
}
n++;
}
}
return 0;
}