C语言实现素数和回文数字判断(并求大于某个自然数n的最小的既是素数又是回文的数)

目录

  1. 判断素数函数
  2. 回文数字判断函数
  3. 求大于某个自然数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;
}

二.测试结果

输入负数
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值