(c语言)设计一个程序,输入一个给定的范围,输出该范围内本身是素数,反序后仍然是素数的所有素数

今天分享一个典型的多函数嵌套的c语言程序!

使用visual stdio c++ 2019。

首先,使用模块化的设计能让程序更加容易理解与维修。如

int isprime(unsigned n);    //返回0表示非素数

unsigned revers(unsigned n);

此两个自定义函数可以放在另外一个源文件,也可以放在同一个源文件。但设置两个源文件的时候注意两个源文件都要写入你所需要的头文件。放在同一个源文件的时候注意在需要用上此函数的函数加声明。

#include<stdio.h>
#include<math.h>
int main()
{
	int isprime(unsigned n);		
	unsigned revers(unsigned n);
	unsigned a, b;
	unsigned i;
	int c=0;
	printf("请输入查找范围最小数:");
	scanf_s("%d", &a);
	printf("请输入查找范围最大数:");
	scanf_s("%d", &b);
	for (i = a; i <= b; i++) {
		if (isprime(i) && revers(i)) {
			printf("存在特殊素数:%d\n", i);
			c++;
		}
		else {};
	}
	if (c == 0) printf("此范围无特殊素数!");
	return 0;
}

此时应对int和unsigned变量细心关注,

int isprime(unsigned n);此函数主要用于此数是否为素数的甄别。

int isprime(unsigned n)
{
	int k,j;
	k = sqrt(n);
	for (j = 2; j <= k; j++)
		if (n % j == 0)break;
	if (j >= k + 1)
		return(n);
	else return 0;
}

相关算法可以参阅谭浩强主编的c程序设计(第四版)。

如果此数不是素数,则isprime(i) && revers(i)的值直接为0,跳过此次循环,i=i+1。

unsigned revers(unsigned n);此函数用于反序数的生成以及生成的素数的甄别。

unsigned revers(unsigned n)
{
	int isprime(unsigned n);
	int d = 0;
	int e = 0;
	int f = n;
	unsigned len = 0;
	if (isprime(n) == 0)return 0;
	else {
		while (n >= 10) {
			n = n / 10;
			len++;
		}
		for (unsigned i = 0; i <= len; i++) {
			d = d * pow(10, len + 1 - i);
			f -= d;
			d = (int)(f / pow(10, len - i));
			e += (d * pow(10, i));
		}
		if (isprime(e) != 0)return(e);
		else return 0;
	}
}

相关做法不一。这里大家可以随意对算法进行个性创作。

最后,对此程序进行测试。这里以100~500为例。

得出结果为:

存在特殊素数:101
存在特殊素数:107
存在特殊素数:113
存在特殊素数:131
存在特殊素数:149
存在特殊素数:151
存在特殊素数:157
存在特殊素数:167
存在特殊素数:179
存在特殊素数:181
存在特殊素数:191
存在特殊素数:199
存在特殊素数:311
存在特殊素数:313
存在特殊素数:337
存在特殊素数:347
存在特殊素数:353
存在特殊素数:359
存在特殊素数:373
存在特殊素数:383
存在特殊素数:389

若有技术问题,欢迎各位的建议与指正!

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值