C语言判断素数的两种方案(包含递归一种)

素数是指那些除了它本身和1之外没有其他因子的自然数,我们可以通过用我们输入的数字依次取余它前面的所有素数来看看是否可以整除,因为它前面其他的那些不是素数的数,都可以用这些素数相乘表示出来,然而这种方法逻辑稍显复杂,首先要先找到输入数字前面所有的素数,这一点已经很麻烦,因此我们采用直接取余它前面所有数字的方法来判断它是否是素数。下面我们看两种方法:

第一种:直接求素数法

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int input = 0; int formernum = 0;
	int isprime = 0;
	scanf("%d", &input);
	formernum = input - 1;
	while (formernum > 1) {
		if (input % formernum == 0) {
			isprime++;
		}
		formernum--;
	}
	if (isprime == 0) {
		printf("%d是素数", input);
	}
	else {
		printf("%d不是素数", input);
	}
	return 0;
}

第二种:递归法判断素数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int checkif(int Input,int u) {
	int Rec = 3;
	if ((Input % (Input - u) == 0)&&(u!=(Input-1))) {
		return 0;
	}
	else if(u!=(Input-1)) {
		u++;
		Rec=checkif(Input, u);
		if (Rec == 0) {
			return 0;
		}
		else {
			return 1;
		}
	}
	else {
		return 5;
	}
}
int main()
{
	int input = 0; int u = 1; int receive = 3;
	scanf("%d", &input);
	if (input == 2) {
		printf("2是素数");
	}
	else {
		receive = checkif(input, u);
		if (receive == 1) {
			printf("%d是素数", input);
		}
		else {
			printf("%d不是素数", input);
		}
	}
	return 0;
}

以上两个方法都可以用于判断一个数字是否是素数,如果给它们套上一个while套子,就可以实现源源不断的连续判断,这都是小事。

这个递归方法十分精巧,我个人还是很满意的,递归的很成功。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

St_Ludwig

求求辣赞助一点米叭,我有大计划

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值