自测-2 素数对猜想

自测-2 素数对猜想

在这里插入图片描述思路分析:首先明确素数的概念:除1和本身以外再无其他的因数的非零自然数(自己想的,并不准确),题目的重点是*“存在无穷多对相邻且差为2的素数”*,其中给出的任意正整数为N(<10^5)。
我们可以知道从1开始的素数有:1.2.3.5.7.11.13.17…
其中当我们求一个数的因数的时候,只需要从1算到这个数的开方就可以了
由于素数的特殊性,可以忽略掉1的计算,从2开始检测

因为如果一个数不是素数是合数,
那么一定可以由两个自然数相乘得到,
其中一个大于或等于它的平方根,一个小于或等于它的平方根。并且成对出现。

#include <iostream>
#include <cmath>
using namespace std;
#define MAX 100000

int main()
{
int num = 0;
while (num <=0 || num >= MAX)cin>>num;
int count = 0;
int prePrimeNum = 0;
for(int i =num; i>=2; i--)//判断两个条件 1.是否为素数 2.是否相邻且差为2
{
    int flag = 1;//设置标记,判断这个数是否为素数
	for(int j = 2; j<=(int)sqrt(i); j++)
{
	if(i%j==0)
	{
	flag = 0;
	break;
    }
}
	if(flag == 1)
    {
	if(prePrimeNum>1&&prePrimeNum-i==2)count++;
	prePrimeNum = i;//不能写进上一个if,假如写进去,则表示,当两个相邻素数差不为2时,prePrimeNum就会没有赋值
    }
}
cout<<count<<endl;
return 0 ;
}

总结:明确判断题目要判断的条件 1.素数 2.相邻且差为2

猜你喜欢

转载自blog.csdn.net/m0_43429389/article/details/107393464