目录
- 判断素数函数
- 回文数字判断函数
- 求大于某个自然数n的最小的既是素数又是回文的数
1.判断素数函数
一.思路
素数,又称质数,是指在大于1的自然数中,除了1和它本身以外不能被其它数整除的数。最小的素数是2。
因此,可以用该整数n分别除以 2~n-1 的数,若都不能整除,则是素数。为了使整数n分别除以2~n-1的数,可以使用一个for循环,代码如下:
/*判断n是否素数,若是素数,返回1,否则返回0*/
int IsPrimeNumber(long n)
{
/*******Begin*******/
int flag = true;//用于返回的标志变量
int i;
if(n<=0)//对输入的数作合法性判断
{
printf("Input error! Please input a positive integer x(>0):");
return -1;
}
else
{
for(i=2;i<n-2;i++)
{
if(0==n%i)
{
flag = false; break;
}
}
return flag;
}
/*******End********/
}
二.改进
考虑这样一种情况:假如n是合数,则必然存在除去1和本身的两个约数x1和x2,其中x1<=sqrt(n),x2>=sqrt(n)。由此我们可以改进上述方法优化循环次数。
int IsPrimeNumber(long n)
{
/*******Begin*******/
int flag = true;//用于返回的标志变量
int i;
if(n<=0)//对输入的数作合法性判断
{
printf("Input error! Please input a positive integer x(>0):");
return -1;
}
else
{
for(i=2;i*i<=n;i++)
{
if(0==n%i)
{
flag = false; break;
}
}
return flag;
}
/*******End********/
}
2. 回文数字判断函数
1.思路
回文数是关于数字中心对成的数,如1234321,121,6。因此我们可以将数字的各位取出来,放到数组 a[] 里,再比较两个头尾位置的数是否相等,如果每组都相等,则该数字是回文数。
2.代码实现
/*判断n是否回文数,若是回文数,返回1,否则返回0*/
int hws(long n)
{
/*******Begin*******/
int a[20];//存放各位的数字(可存放19个数字)。
int flag = 1;//设置标志变量,用于返回。
int i =0,j;
do
{
a[i] = n%10; //将数n的个位存入a[0],其余位置依次存入。
n/=10; //将数n的最后一位舍掉,以得到相应位置上的数字。
i++;
}while(n);//循环结束的条件是n变为0
for(j=0;j<i/2;j++)
{
if(a[j]!=a[i-2-j]) //将数组头尾两端的数进行比较
{
flag = 0;
}
}
return flag;
/*******End********/
}
3. 求大于某个自然数n的最小的既是素数又是回文的数
一.代码
取中间变量x=n,这里可以从n本身开始,判断它是否满足条件,若不满足,则x++,直到找到满足条件的x。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define true 1
#define false 0
//函数声明
int IsPrimeNumber(long n);
int hws(long n);
int main()
{
long n;
int flag=0;
printf("请输入自然数n:");
scanf("%ld",&n);
int x =n;
do
{
if(IsPrimeNumber(x)&&hws(x)) //利用函数的返回值判断是否满足条件
{
flag = 1;
printf("最小的满足条件数为:%d",x);
}
else
{
x++;
}
}while(!flag);
return 0;
}
二.测试结果