Supreme Number
问题分析
题意:我们称,类似于由1和7组成的
n=17
n
=
17
,并且子序列也都是质数的数为
SupremeNumber
S
u
p
r
e
m
e
N
u
m
b
e
r
,求不超过
N
N
的最大。
题解:可以看出这样的数只能由
1,2,3,5,7
1
,
2
,
3
,
5
,
7
组成,我的方法就是。。暴力打表,发现这样的数最大不会超过四位,预处理出来枚举即可。
官方题解:由于任意两个不为
1
1
的数字构成的两位数一定可以被整除,所以答案在除
1
1
以外的数字只能出现一次;最多出现两次,因为
111
111
可以被
3
3
整除;而三者一点不会有两者同时出现。因此满足条件的整数不会超过四位。
代码
#include <bits/stdc++.h>
typedef long long LL;
const int N = 1e3+10;
char s[N];
int ans[50] = {1,2,3,5,7,11,13,17,23,31,37,53,71,73,113,131,137,173,311,317};
int main()
{
int T,w = 0;
scanf("%d", &T);
while(T--) {
scanf("%s", s);
int num = 0, k = 0, ret = 0;
do {
int t = s[k++]-'0';
num = num*10 + t;
if(k >= 4||num>=317) {
ret = 317;
break;
}
} while(s[k]);
int i;
for(i = 0; ans[i] <= 317 && ans[i]; ++i) {
if(num < ans[i]) {
ret = ans[i-1];
break;
}
}
if(ans[i] == 0) {
ret = 317;
}
printf("Case #%d: %d\n",++w,ret);
}
}