首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

快速找回文素数

2012-03-19 
求救 快速找回文素数输入一个数字,表示测试用例,然后输入a,b表示a到b之间的回文素数数字然后输出他们程序

求救 快速找回文素数
输入一个数字,表示测试用例,然后输入a,b表示a到b之间的回文素数数字
然后输出他们
程序有运算时间限制
#include<stdio.h>
#include<string.h>
#include<math.h> int lookforback(int i);
int lookforsushu(int i); main()
{
int k,i,m,n,j;
scanf("%d",&k);
for(i=0;i<k;i++)
{
scanf("%d %d",&m,&n);
if(m%2==0)//排除被2整除的
m++;
for(j=m;j<n;j+=2)
{
if(lookforback(j))//寻找回文 
if(lookforsushu(j))// 寻找素数 
printf("%d\n",j); 
}
}
} int lookforback(int i)
{
int j,num[100],k;
int * p=num,sum;
for(j=0;i!=0;j++)
{
num[j]=i%10;
sum+=i;
i/=10; 
}
if(sum%3==0)//各位数字被3整除的排除 
return 0;
j--;
for(k=0;k<=j/2;k++)//判断是否为回文 
{
if(*(p+k)!=*(p+j-k))
return 0;
}
return 1;
} int lookforsushu(int i)
{
int j;
for(j=2;j<sqrt(i);j++)
{
if(i%j==0)
return 0;
}
return 1;
}
唯一改的地方就是我这是判断回文,上网查找方法,听见一个人说,是生成回文,而不是判断,
但是不明白怎么生成指定范围的回文.




[解决办法]
给出一个尚未验证过的回文算法(因为家里机器没有开发环境,实在是没法验证,见谅)。尽管我已经很小心了,还是可能留有错误在里面。

该算法用于生成回文数字,每次调用getPalindromNumber函数时会得到一个比参数更大的最小回文整数。

C/C++ code
#include <math.h>int getIntLong(int x){    int c=0;    do {        c++;        x%=10;    }while(x>0);    return c;}//    该函数生成一个比参数大的最小回文数字int getPalindromeNumber(int x){    int c,v,y;    // c用于存储参数x的位数,v存储回文数字,y存储尚未复制数字。    c=getIntLong(x);    int halfLong=(c+1)%2;    // 用于存储参数的半长度,小数部分舍入。    //    下面生成回文    v=y=(x%(int)pow(10.0,c-halfLong))+1;    //    将参数位长折半且增量。    for (int i=1;i<=halfLong;i++)    {        if (i!=1||c==(halfLong+halfLong))            v=10*v+y-(y%10)*10;        //    复制数码到尾部,当参数位长为奇数时不复制个位数码。        y=y%10;    }    return v;} 

热点排行