首页 > 代码库 > Vijos 捕风捉影
Vijos 捕风捉影
背景
《风云》里有详细记载,自己去看吧^_^...
描述
有一天,雄霸传授本人风神腿法第一式:捕风捉影..............的步法(弟子一:堂主,你大喘气呀。风:你给我闭嘴。)捕风捉影的关键是换气(换不好就会大喘气...)。
使用捕风捉影这一招时并不是每一步都喘气,而是在特定的步数喘气。一般来说功力越高,喘气越稀疏。喘气的步数符合特定规律:第一要是SUSHU(弟子二:哇塞!堂主,你还会鸟语,我好好崇拜你呦!可是SUSHU是什么意思呢?风:笨蛋,那是汉语拼音!)第二要是一个回文数,回文数就是正反念一样的数,如:123321,121,5211314(弟子三:堂主,最后一个好象不是...风:废话,当然不是了,我是考察一下你们的纠错能力!)现在给出两个数M,N(5<=M<N<=100,000,000),你要算出M,N之间需要换气的都有哪几步。(包括M,N)。算出来的可以提升为本堂一级弟子,月薪(1000000000000000000000000000000000000000000 MOD 10 )元。
格式
输入格式
两个整数M,N。用空格隔开。
输出格式
在M,N之间的换气点,每个一行。
样例1
样例输入1
100 500
Copy
样例输出1
101131151181191313353373383
Copy
来源
来自天下会神风堂主
1 /* 2 乍一看数据范围很大 3 其实只需要注意两点就行了 4 这个回文素数必定是2n-1位 2n位回文数必定被11整除 5 回文数第一位只能是1 3 7 9 6 把回文数表打出来在判断就好了 7 */ 8 #include<cmath> 9 #include<cstdio>10 #include<iostream>11 #include<algorithm>12 #define MAXN 101013 14 using namespace std;15 16 int n,m,cnt;17 int a[MAXN];18 19 inline void read(int&x) {20 x=0;int f=1;char c=getchar();21 while(c>‘9‘||c<‘0‘) {if(c==‘-‘) f=-1;c=getchar();}22 while(c>=‘0‘&&c<=‘9‘) {x=(x<<1)+(x<<3)+c-48;c=getchar();}23 x=x*f;24 }25 26 inline bool pd(int x) {27 for(int i=2;i<=sqrt(x);i++)28 if(x%i==0) return false;29 return true;30 }31 32 inline void sushu() {33 for(int i=1;i<=9;i+=2) {34 if(pd(i*10+i)) a[++cnt]=i*10+i;35 if(i!=5)36 for(int j=0;j<=9;j++) {37 if(pd(i*100+j*10+i)) a[++cnt]=i*100+j*10+i;38 for(int k=0;k<=9;k++) {39 if(pd(i*10000+j*1000+k*100+j*10+i)) a[++cnt]=i*10000+j*1000+k*100+j*10+i;40 for(int l=0;l<=9;l++) {41 if(pd(i*1000000+j*100000+k*10000+l*1000+k*100+j*10+i))42 a[++cnt]=i*1000000+j*100000+k*10000+l*1000+k*100+j*10+i;43 }44 }45 }46 }47 }48 49 int main() {50 read(n);read(m);51 a[++cnt]=5;a[++cnt]=7;52 sushu();53 sort(a+1,a+1+cnt);54 for(int i=1;i<=cnt;i++) 55 if(a[i]>=n&&a[i]<=m)56 printf("%d\n",a[i]);57 //printf("%d\n",cnt);58 return 0;59 }
Vijos 捕风捉影
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。