在a和b的范围内寻找有多少个只用质数构成的等差数列

要保证每一组质数的等差数列尽可能的大

这是小花最近在练题的时候看到的一道题,搜了答案感觉都不是很好懂,所以我就自己写了一个c语言版有注释的,希望能帮到大家呀

下面是代码:

void main() {
	int n, m, s = 0;
	int sushu[100];
	int middex[100][3];//存储每个公差,和它的开始和结束元素
	int mid;//公差
	int midshu=0;//公差的个数
	printf("请输入两个整数a、b(范围为a~b):\n");
	scanf("%d %d", &n, &m);
	//求质数并用数组sushu存储
	for (int i = n; i <= m; i++) {
		if (i == 2 || i == 3) {
			sushu[s++] = i;
		}
		else if (i == 1)
			continue;
		else {
			int j;
			for (j = 2; j <= sqrt(i); j++) {
				if (i % j == 0)
					break;
			}
			if (j > sqrt(i))
				sushu[s++] = i;
		}
	}
	//打印质数数组
	printf("%d到%d质数为:\n", n, m);
	for (int i = 0; i < s; i++)
		printf("%d\t", sushu[i]);
	printf("\n");
	//求有多少质数构成等差数列
	for (int i = 0; i < s - 1; i++) {
		for (int j = i + 1; j < s; j++) {
			mid = sushu[j] - sushu[i];
			int k;
			int cin = 2;//在mid的等差里数列的个数
			int start = sushu[i];//开始元素
			int begin = sushu[j];//结束元素
			for (k = j + 1; k < s; k++) {
				if (sushu[k] - begin == mid) {
					begin = sushu[k];
					cin++;
				}
				else if (sushu[k] - begin > mid)
					break;
			}
			if (cin > 2) {
				for (k = 0; k < midshu; k++)
					if (mid == middex[k][0] && begin == middex[k][2])
						break;
				if (k < midshu)
					continue;
				middex[midshu][0] = mid;
				middex[midshu][1] = start;
				middex[midshu++][2] = begin;
			}
		}
	}
	//打印等差数列的公差和开始、结束元素
	printf("公差\t开始元素\t结束元素\n");
	for (int i = 0; i < midshu; i++) {
		printf("%d\t%d\t\t%d\n", middex[i][0], middex[i][1], middex[i][2]);
	}
	printf("等差数列的个数为%d", midshu);
}

下面是运行成功的图片:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值