⽤C语⾔求三位数的回⽂素数,C语⾔求回⽂素数
问题描述
所谓回⽂素数指的是,对⼀个整数n从左向右和从右向左读其数值都相同且n为素数,则称整数为回⽂素数。
对于偶数位的整数,除了11以外,都不存在回⽂素数。即所有的4位整数、6位整数、 8位整数…都不存在回⽂素数。下⾯列出两位和三位整数中包含的所有回⽂素数。
两位回⽂素数:11
三位回⽂素数:101、131、151、181、191、313、353、373、383、727、757、787、 797、 919、 929
本题要求解的问题是:求出所有不超过1000的回⽂素数。
问题分析
本题要使⽤判断素数的⽅法,并且要解决如何求⼀个整数的回⽂数。
采⽤的⽅法是穷举法。对1000以内的每⼀个整数n进⾏考察,判断n是否为回⽂数。如果n是回⽂数,再判断它是否为素数,对于既是回⽂数也是素数的整数n,就是要求的回⽂素数,将其打印输出即可。
由于题⽬要求解的是所有不超过1000的回⽂素数,因此最后的结果中应该包含两位和三位的回⽂数。
采⽤穷举法来构造⼀个整数并求与其对应的反序数,若整数与其反序数相等,则该整数是回⽂数。
算法设计
在问题分析中⼰经确定要采⽤穷举法逐⼀考察1000以内的每个整数,因此本题的算法设计可以⾤⽤循环结构来完成。
通过三重循环来遍历所有1000以内的整数。⽤三个循环变量来构造整数n,同时,这三个循环变量反序便可以构造出n的反序数m。其中,特别要注意的是如果n的个位为0,接下来要做的就是⽐较m和n的值是否相等,如果相等,则表明整数n是回⽂数。再来判断n是否是素数,如果n同时也为素数,则n为回⽂素数,将其打印出来即可。
下⾯是完整的代码:
#include
int fun(int n);
int main()
{
int i, j, k, n, m;
printf("不超过1000的回⽂数:\n");
for(i=0; i<=9; ++i) /*穷举第⼀位*/
for(j=0; j<=9; ++j) /*穷举第⼆位*/
for(k=0; k<=9; ++k) /*穷举第三位*/
{
n=i*100+j*10+k; /*计算组成的整数*/
m=k*100+j*10+i; /*计算对应的反序数*/
if(i==0 && j==0) /*处理整数的前两位为0的情况*/
{
m=m/100;
}
else if(i==0) /*处理整数的第⼀位为0的情况*/
{
m=m/10;
}
if(n>10 && n==m && fun(n)) /*若⼤于10且为回⽂素数,则输出*/
{
printf("%d\t", n);
}
}
printf("\n");
return 0;c++判断素数
}
/*判断参数n是否为素数*/
int fun(int n)
{
int i;
for(i=2; i
{
if(n%i == 0)
return 0;
}
return 1;
}
运⾏结果:
不超过1000的回⽂数:
11 101 131 151 181 191 313 353 373 383 727 757 787 797 919 929

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。