首先有一个性质,对于(1le x< 10^{18})有(f(x+10^{18})=f(x)+1)
可以注意到:
[sum_{i=1}^{10^{18}-1}f(i)=x(~mod~~a~ )
]
于是就有:
[sum_{i=1}^{10^{18}}f(i)=sum_{i=1}^{10^{18-1}}+f(0+10^{18})-f(0)=x+1(~~mod~~a ~~)
]
同样也可以得到:
[sum_{i=t}^{10^{18}-1+t}f(i)=x+t(~mod~~a~)
]
假设 (x=0),那么直接输出 (1) 和 (10^{18}-1)
否则可以想到 (t=a-x)
然后直接输出 (l=t) 和 (r=10^{18}-1+t) 即可
于是问题的关键就在于(sum_{i=0}^{10^{18}-1}f(i))是多少了
下面给出简略证明
可以发现每一个数位贡献的次数是固定的,可以考虑将(10^{18}-1)看作是(18)个格子,然后放入一些数字,求所有方案放入的数字和
于是可以枚举一个数(0le xle 9)来计算其贡献次数
可以考虑其恰好出现 (i) 次时的答案,那么可以枚举(i)个位置选入这个数(x),然后接下来(18-i)个位置都可以放入除了(x)之外的所有数,所以有其贡献次数为:
[i imes dbinom{i}{18} imes 9^{18-i}
]
所以答案就是:
[sum_{x=0}^9x imes sum_{i=0}^{18}i imes dbinom{i}{18} imes 9^{18-i}
]
[45 imes sum_{i=0}^{18}i imes dbinom{i}{18} imes 9^{18-i}
]
[45 imes sum_{i=0}^{18}i imes dfrac{18!}{i!(18-i)!} imes 9^{18-i}
]
[45 imes sum_{i=1}^{18} dfrac{18 imes 17!}{(i-1)!((18-1)-(i-1))!} imes 9^{(18-1)-(i-1)}
]
[18 imes45 imes sum_{i=0}^{17} dfrac{17!}{i!(17-i)!} imes 9^{17-i}
]
[18 imes45 imes sum_{i=0}^{17} dbinom{17-i}{17} 9^{17-i}
]
[18 imes45 imes10^{17}
]
[9 imes 9 imes 10^{18}
]
#include<bits/stdc++.h>
using namespace std ;
#define rep( i, s, t ) for( register int i = s; i <= t; ++ i )
#define re register
#define int long long
int gi() {
char cc = getchar() ; int cn = 0, flus = 1 ;
while( cc < '0' || cc > '9' ) { if( cc == '-' ) flus = - flus ; cc = getchar() ; }
while( cc >= '0' && cc <= '9' ) cn = cn * 10 + cc - '0', cc = getchar() ;
return cn * flus ;
}
int P = 1e18, l, r ;
signed main()
{
int A = gi() ;
l = A - ( ( P % A ) * 9 % A * 9 ) % A, r = l + P - 1 ;
printf("%lld %lld", l, r ) ;
return 0 ;
}
qwq