思路:
先把给定区间内的素数按顺序存在数组里,再对数组进行遍历查找即可。
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#include<algorithm>
#include<string.h>
#include<math.h>
#define llu unsigned long long
using namespace std;
//L1-8 均是素数 (20 分)
int a[1010];
int t=0;
void sushu(int x,int y){//将给定定区间内所有素数按顺序存储起来
int l=x,r=y;
int flag;
for(int i=l;i<=r;i++)
{
if(i==2)
{
a[t++]=2;
continue;
}
if(i==3)
{
a[t++]=3;
continue;
}
flag=1;
if(i%6!=1&&i%6!=5||i==1){
continue;
}
for(int j=2;j<=sqrt(i);j++)
{
if(i%j==0){
flag=0;
break;
}
}
if(flag)
{
a[t++]=i;
}
}
}
bool sushu2(llu x){//判断某个数字是不是素数
if(x==0)return 0;
if(x==1)return 0;
if(x==2)return 1;
if(x==3)return 1;
if(x%6!=1&&x%6!=5){
return 0;
}
for(int j=2;j<=sqrt(x);j++)
{
if(x%j==0)return 0;
}
return 1;
}
int main()
{
int m,n;
int ans=0;
cin >> m >> n ;
sushu(m,n);
for(int i=0;i<t-2;i++)
{
int p,q,r;
llu b,c,d;
p=a[i];
for(int j=i+1;j<t-1;j++)
{
q=a[j];
for(int k=j+1;k<t;k++)
{
r=a[k];
b=p*q+r;
c=q*r+p;
d=r*p+q;
if(sushu2(b)&&sushu2(c)&&sushu2(d))
{
ans++;
}
}
}
}
cout << ans << endl ;
return 0;
}