L1-8 均是素数 (20 分)
在给定的区间 [m,n] 内,是否存在素数 p、q、r(p<q<r),使得 pq+r、qr+p、rp+q 均是素数?
输入格式:
输入给出区间的两个端点 0<m<n≤1000,其间以空格分隔。
输出格式:
在一行中输出满足条件的素数三元组的个数。
输入样例:
1 35
输出样例:
10
样例解读
满足条件的 10 组解为:
2, 3, 5
2, 3, 7
2, 3, 13
2, 3, 17
2, 5, 7
2, 5, 13
2, 5, 19
2, 5, 31
2, 7, 23
2, 13, 17
// L1-8 均是素数 (20 分)
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
int prime[N];
bool judge[N];
void sieve()
{
memset( prime,0,sizeof( prime ) );
memset( judge,0,sizeof( judge ) );
int i,j,cnt=0;
judge[1]=1;
for( i=2;i<N;i++ )
{
if( judge[i]==0 )
prime[cnt++]=i;
for( j=0; j<cnt && i<=N/prime[j] ; j++ )
{
judge[ i*prime[j] ]=1;
if( i%prime[j]==0 ) break;
}
}
}
int main()
{
sieve();
int m,n,ans,r,i,j,k;
while( cin>>m>>n ) // 是否存在素数 p、q、r
{
ans=0;
for( i=m;i<=n;i++ )
{
if( judge[i] ) continue;
for( j=i+1;j<=n;j++ )
{
if( judge[j] ) continue;
for( k=j+1;k<=n;k++ )
{
if( judge[k] ) continue;
if( judge[i*j+k]==0 && judge[i*k+j]==0 && judge[j*k+i]==0 )
ans++;
}
}
}
cout<<ans<<endl;
}
return 0;
}