PTA_2022模拟赛_L1-8 均是素数 (20 分)_线性筛

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;	
} 

猜你喜欢

转载自blog.csdn.net/qq_63173957/article/details/124238804