这次网络赛没有打。生病了去医院了。。尴尬。晚上回来才看了题补简单题。
K Supreme Number
题目链接:https://nanti.jisuanke.com/t/31452
题意:输入一个整数n(其实可以当成字符串,因为很长啊。),求满足不超过n的supreme number。这个supreme number的定义是,这个字符串的子串都是质数。比如。137就是,但是19就不是。
题解:找规律。我先开始题没看懂,没懂子串也要为素数。后面才看到。然后在纸上枚举了一下可能出现的情况。发现大于4位数之后的只有317可以满足。所以打表列举即可。
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include<vector> 3 #include<cstdio> 4 #include<cstring> 5 #include<queue> 6 #include<cmath> 7 using namespace std; 8 typedef long long ll; 9 const int N =1e8+5; 10 const int mod = 1e9+7; 11 int T; 12 int sp[21] = {1,2,3,5,7, 13 11,13,17,23,31,37,53,71,73, 14 113,131,137,173, 15 311,317,1000}; 16 17 int change(string s){ 18 int num = 0; 19 for( int i = 0 ;i < s.size(); i++){ 20 num = num * 10 + s[i] - '0'; 21 } 22 return num; 23 } 24 25 26 int main(){ 27 cin>>T; 28 int t = 1; 29 while(T--){ 30 string s; 31 cin>>s; 32 int len = s.size(); 33 if(len >= 4){ 34 printf("Case #%d: 317 ",t++); 35 } 36 else{ 37 int num = change(s); 38 39 for(int i = 0 ; i <= 20;i++){ 40 if(num == sp[i]){ 41 printf("Case #%d: %d ",t++,sp[i]); 42 break; 43 } 44 else if(num < sp[i]){ 45 printf("Case #%d: %d ",t++,sp[i-1]); 46 break; 47 } 48 } 49 } 50 } 51 return 0; 52 } 53