CF468C Hack it! 超详细解答
构造+数学推导
原文极简体验
CF468C Hack it!
题目简化:
令\(f(x)\)表示\(x\)在十进制下各位数字之和
给定一整数\(a\)构造\(l,r\)
使得\(\sum_{i=l}^r f_i≡ 0 (mod \space a)\)
\(1≤a≤10^{18}\)
\(1≤l,r≤10^{200}\)
致简约:
可以发现\(f_{1e18+x}-f_{x}=1\)
所以有前缀和函数\(S_{1e18+x}=S_{1e18}+S_{x}+x\)
所以\(S_{1e18+x}-S_{x}=S_{1e18}+x\)
等式左边可以看作\(\sum_{i=l}^rf_i\)
所以\(S_{1e18}+x≡0\)
所以\(x=-S_{1e18}(mod \space a)\)
\(S_{1e18}=81 \times 1e18+1\)
\(code:\)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll maxx=1e18,a,k=1e18;
int main()
{
cin>>a;
k=(((((k%a)*9)%a)*9)%a+1)%a;
k=(-k%a+a)%a;
cout<<1+k<<" "<<maxx+k<<endl;
}