【C语言】PAT乙级:1007 素数对猜想

现给定任意正整数N(<100000),请计算不超过N的满足猜想的素数对的个数,“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

思路:先对100001内的所有素数进行打表存入一个数组,这实在是太LOW了!!!我们应该只用两个变量first和second来判断素数对的存在以减少内存占用(运行速度无明显差异)!在本题中具体实现为int judge[2] = { 1,1 };int index = 0;if (index > 0&&((index % 2 == 0 && (judge[1] - judge[0] == 2)) || (index % 2 == 1 && (judge[0] - judge[1] == 2))))count++;(初始为1,1是有讲究的,后续代码注释中给出解释)

代码:

#include <stdbool.h>
#include <stdio.h>
int main(void)
{
	int judge[2] = { 1,1 };
	int index = 0;
	int n = 0;
	int count = 0;
	int div = 0;
	int num = 0;
	bool flag = true;
	scanf("%d", &n);
	if (n >1)
	{
		for (num = 2;num <= n;num++)
		{
			for (div = 2,flag = true;div * div <= num;div++)
			{
				if (num % div == 0)
                   {
					  flag = false;
                      break;
                   }
				/*求素数逻辑:1不进入外层循环(false),2、3不进入内层循环(true), 一个非素数数的最小公约数,
				必定小于等于其开根号*/
			}
			if (flag == true)
			{
				judge[index % 2] = num;
				//index控制数组下标,由此反复更改judge[0]和judge[1]
				index++;
			if ((index % 2 == 0 && (judge[1] - judge[0] == 2)) || (index % 2 == 1 && (judge[0] - judge[1] == 2)))
				count++;
			/*判断素数对逻辑: 初始化judge[2] = {1,1};防止index == 0时judge[2] = {2,0}使count++,数组下标为0时judge[1] - judge[0]==2,数组下标为1时judge[0] - judge[1]==2*/
			}
		}
	}
	printf("%d", count);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值