在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Description定义 \(f(x)\) 表示 \(x\) 的各个数位之和。现在要求 \(\sum_{i=l}^rf(i)\bmod a\)。 显然 \(1\leq a\leq 10^{18}\),构造出的 \(l,r\) 需满足 \(1\leq l\leq r\leq 10^{200}\),同时 \(\sum_{i=l}^rf(i)\bmod a=0\)。 Solution定义 \(g(x)=\sum_{i=1}^xf(i)\),则 \(\sum_{i=l}^rf(i)=g(r)-g(l-1)\)。 首先可以发现,对于 \(1\leq x<10^{18}\),有: \(\displaystyle f(x+10^{18})-f(x)=1\) 也就是说,当 \([l,r]\) 从 \([x+1,x+10^{18}]\) 变成 \([x+2,x+10^{18}+1]\) 时(整体增大 \(1\)),由于 \(f(x+10^{18}+1)-f(x+1)=1\),因此结果会增加 \(1\)。 那么,当 \([l,r]\) 从 \([1,10^{18}]\) 变成 \([x+1,x+10^{18}]\) 时(整体增大 \(x\)),结果会增加 \(x\)。即: \(\displaystyle \sum_{i=k+1}^{k+10^{18}}\equiv g(10^{18})+k\pmod a\) 若 \(g(10^{18})\equiv x\pmod a\),取 \(k=a-x\),那么: \(\displaystyle \sum_{i=a-x+1}^{a-x+10^{18}}\equiv 0\pmod a\) 则可取 \([l,r]\) 为 \([a-x+1,a-x+10^{18}]\)。考虑如何求出 \(x\)。 不难发现,\(g(10^x)=45\times x\times 10^{x-1}+1\)。所以 \(g(10^{18})=45\times 18\times 10^{17}+1\)。 #include<bits/stdc++.h> #define int long long using namespace std; int a,x; signed main(){ scanf("%lld",&a),x=1ull*((int)1e17%a*45%a*18%a+1)%a; printf("%lld %lld\n",a-x+1,a-x+(int)1e18); return 0; } |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论