P13464 [GCJ 2008 #1C] Ugly Numbers
题目描述
从前在一个奇特的世界里,人们称一个数为“丑数”,如果它能被任意一个一位质数($2$、$3$、$5$ 或 $7$)整除。因此,$14$ 是丑数,但 $13$ 不是。$39$ 是丑数,但 $121$ 不是。注意,$0$ 也是丑数。同时,负数也可以是丑数,比如 $-14$ 和 $-39$。
有一天,你闲来无事,盯着一串数字,比如:
$123456$
你很好奇,如果允许你在数字之间插入加号或减号,会有多少种可能的表达式。例如,你可以得到:
$1 + 234 - 5 + 6 = 236$
这是一个丑数。或者
$123 + 4 - 56 = 71$
这不是丑数。
计算你可以操作的方式很简单:在每两个相邻数字之间,你可以选择插入加号、减号或什么都不插。因此,如果你有 $D$ 位数字,总共可以构造 $3^{D-1}$ 个表达式。
注意,数字可以有前导零。如果字符串是 "01023",那么 "01023"、"0+1-02+3" 和 "01-023" 都是合法表达式。
你的任务很简单:在这 $3^{D-1}$ 个表达式中,统计有多少个表达式的结果是丑数。
输入格式
输入的第一行包含一个整数 $N$,表示测试用例的数量。每个测试用例为一行,包含一个非空的十进制数字字符串。
输出格式
对于每个测试用例,输出一行:
Case #X: Y
其中 $X$ 是测试用例编号(从 $1$ 开始),$Y$ 是表达式结果为丑数的表达式个数。
说明/提示
**限制条件**
- $0 \leq N \leq 100$。
- 每个测试用例的字符串非空,仅包含字符 '0' 到 '9'。
**小数据集(测试集 1 - 可见)**
- 每个字符串长度不超过 $13$。
**大数据集(测试集 2 - 隐藏)**
- 每个字符串长度不超过 $40$。
由 ChatGPT 4.1 翻译