P16140 圆圈函数(circle)
题目背景
如果 $1001=2,1867=3,1902=2$,那么 $2108=\_\_$?
答案:$3$。
题目描述
定义一个 $\N\to\N$ 的函数 $f(x)$,其函数值是十进制下每个数字封闭环的个数之和,$0\sim9$ 的十个数字的封闭环的个数分别是:
::cute-table{tuack}
|$n$|$0$|$1$|$2$|$3$|$4$|$5$|$6$|$7$|$8$|$9$|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|$f(n)$|$1$|$0$|$0$|$0$|$1$|$0$|$1$|$0$|$2$|$1$|
上面的表格可以看作是函数的初始值,递推式就是
$$f(10n+m)=f(n)+f(m),n\in\N^*,m\in\{0,1,2,3,4,5,6,7,8,9\},$$
但是这个 $m$ 的限制较多,所以问题是:对于给定的正整数 $n$,求出有多少个不超过 $n$ 的自然数 $m$,满足 $f(10n+m)=f(n)+f(m)$。
输入格式
一行,一个正整数 $n$。
输出格式
一行,一个整数,表示 $0\le m\le n$ 中满足 $f(10n+m)=f(n)+f(m)$ 的 $m$ 的个数。
说明/提示
### 样例 $1$ 解释
由递推式可知所有小于等于 $6$ 的非负整数 $m$ 都满足 $f(10\times 6+m)=f(6)+f(m)$。
### 样例 $2$ 解释
根据递推式,满足 $0\le m\le 9$ 的整数 $m$ 符合题目要求,另外还有 $20,21,22,23,24,25$ 六个数字,原因如下:
- $f(10\times 25+20)=f(270)=1=f(25)+f(20)$;
- $f(10\times 25+21)=f(271)=0=f(25)+f(21)$;
- $f(10\times 25+22)=f(272)=0=f(25)+f(22)$;
- $f(10\times 25+23)=f(273)=0=f(25)+f(23)$;
- $f(10\times 25+24)=f(274)=1=f(25)+f(24)$;
- $f(10\times 25+25)=f(275)=0=f(25)+f(25)$。
### 数据范围
对于所有测试数据,保证:$1\le n\le 10^{17}$。
::cute-table{tuack}
|测试点编号|$n\le$|
|:-:|:-:|
|$1\sim 10$|$10^6$|
|$11\sim 30$|$5\times 10^7$|
|$31\sim 50$|$10^{17}$|