求 1到100000000 既是回文又是素数的数字
2010-04-03 21:12
169 查看
# include<stdio.h> # include<stdlib.h> # include<string.h> # include<math.h> unsigned long data[2000] ; int count; char str[20]; char str1[20]; char str2[20]; int cmp(const void *a,const void *b) { return *(unsigned long *)a-*(unsigned long *)b; } int issushu(unsigned long num) { unsigned long i,j ,k = num; for (j = (unsigned long)sqrt(k),i = 2;i <= j+1;i++) if (num%i==0) return 0; return 1; } void _itoah(int n,int digit ) { int i = 0; for(i = 0;i < digit;i ++) { //str[digit-i-1] = n%10 + '0'; str[digit-i-1] = n%10 + '0'; n /=10; } } void _itoad(int n,int digit,int b )// 针对 奇数和偶数的不同 增加一个标志位 { int i = 0,j = digit; if(b==1) digit ++; for(i = 0;i < j;i ++) { str[digit++] = n%10 + '0'; n /=10; } } void even_huiwen(int n) { long i ,j,digit = n/2,tmp = 0; //j = (long)pow(10,digit) -1; j = (long)pow(10,digit) -1; for(i = (long)pow(10,digit-1); i <= j;i++ ) //i代表偶数的高位//(long)pow(10,n-1); i <= j;i++ ) { _itoah(i,digit); _itoad(i,digit,0); str = '/0'; strcpy(str1,str); strrev(str1); if (!strcmp(str1,str)) if(issushu(atol(str))) data[count ++] = atol(str);//printf("%ld/t",atol(str)),data[count ++] = atol(str); memset(str,NULL,sizeof(str)); memset(str1,NULL,sizeof(str1)); } } void odd_huiwen(int n) { long i ,j,k,digit = n/2,tmp = 0; j = (long)pow(10,digit) -1; for(k = 0;k < 10; k ++) // 奇数位中间的数字 for (i = (long)pow(10,digit-1);i <= j ; i ++) { _itoah(i,digit); str[digit] = k + '0'; _itoad(i,digit,1); str = '/0'; strcpy(str1,str); strrev(str1); if (!strcmp(str1,str)) if(issushu(atol(str))) data[count ++] = atol(str);//printf("%ld/t",atol(str)),data[count ++] = atol(str); memset(str,NULL,sizeof(str)); memset(str1,NULL,sizeof(str1)); } } int main() { unsigned long a,i,j,x,y; data[0] = 2,data[1] = 3,data[2] = 5,data[3] = 7,data[4] = 11; //freopen("pprime1.out","w",stdout); count = 5; int n; //生产所有的回文素数 for(int _digit = 3; _digit <= 8;_digit+=2) { if(_digit%2==0) even_huiwen(_digit); else odd_huiwen(_digit); } qsort(data,count,sizeof(unsigned long ),cmp); scanf("%d",&n); while (n--) { scanf("%ld%ld",&x,&y); for (i=0;data[i] <=y&&i<=count;i++) { if (data[i]>=x) printf("%ld/n",data[i]); } } return 0; }
相关文章推荐
- 求 1到100000000 既是回文又是素数的数字
- 一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。 小王对既是素数又是回文的
- :回文素数是指一个数同时为素数和回文数。例如:131是一个素数,同时也是一个回文素数。数字313和757也是如此。 编写程序,显示前100哥儿回文素数。每行显示10个数并且准确对齐,如下所示: 2
- 素数回文——输出两整数之间所有既是回文数又是素数的数 C++实现
- 小王对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在小王想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100
- 蓝桥杯 回文数字 (暴力枚举)
- Java 简单算法--打印回文数字
- 将1、2、...、20这20个数排成一排,使得相邻的两个数之和为一个素数,且首尾两数字之和也为一个素数。
- 蓝桥杯 回文数字(水题)
- 回文数字 (2013年11月24日 蓝桥杯校内选拔赛c\c++B组)
- HDU 1431 素数回文(打表)
- 十一、判断一个数字是否是素数
- 第2-5节项目6(2)-回文、素数
- 2016蓝桥杯 历届往题——回文数字
- 判断一个数字是否为回文,不使用额外的存储空间
- 华为编程题之二:回文数字猜想
- HDU-1431-素数回文
- leetcode 479. Largest Palindrome Product 最大的回文数字 + 直接暴力真好
- 蓝桥杯历届试题 回文数字
- HDOJ 提姆1431素数回文 (打表)