7_13_P题 Hack it!
简单题意
设 f(x) ,是x每一位上的数之和,求一个区间l,r,使 ∑ri=lf(i) mod n=0 , n为输入
思路
很显然
f(1018+x)−f(x)=1
所以有
∑1018+xi=xf(i)=∑1018i=1f(i)+∑xi=1f(1018+i)−f(i)
整理得
∑1018+xi=xf(i)=∑1018i=1f(i)+x
令
sum=∑1018i=1f(i)
则有
∑1018+xi=xf(i)=sum+x
令
x=(n−sum mod n)mod n
则解就是
[1+x,1018+x]
代码
Python
n = int(input())
r = 45*18*10**17;
l = n-r%n
r = l +10**18-1
print(l,r)
CPP
#include <iostream>
using namespace std;
typedef long long ll;
const ll maxn = 1e17;
int main (){
ll n;
cin >>n;
ll l = n - 9LL*(5LL*(9LL*(2LL*maxn%n)%n)%n)%n;
ll r = l+1e18-1;
cout << l <<" "<<r <<endl;
return 0;
}