题解:CF2140B Another Divisibility Problem

· · 题解

CF2140B 题解

题意

给定一个数 x(1 \le x < 10^8),让你求出一个数 y(1 \le y < 10^9),令 k=xy 在十进制下拼接的数,使 (x+y)\mid k

思路

首先,我们令 d 表示 y 的十进制位数。所以 xy 十进制下拼接之后为 10^dx+y

因为 (x+y)\mid k,所以 10^dx+y\equiv 0(\bmod (x+y))

因为 y \equiv -x (\bmod(x+y)),所以 (10^d-1)x \equiv 0(\bmod (x+y))

因此我们只要让 x+y=10^d-1 即可。容易发现,取 d=9 时,因为 x < 10^8y 的位数一定是 9 位,所以 y < 10^9 d=y 的十进制位数。

对于每一组数据输出 10^9-1-x 即可。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
main(){ 
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        cout<<1e9-1-n<<endl;
    } 
    return 0;
}