luogu P2640 神秘磁石| 线性筛素数
题目描述
1.若给他一个一维坐标系,那么他的磁力一定要在素数坐标的位置上才能发挥的最大(不管位置坐标的大小,只要是素数那么磁力就一样大)
2.若两个磁石相距为k,那么磁石间的破坏力将会达到当前磁力的峰值
显然,两磁石间最大破坏力取决于磁力大小和磁石间距,那么请问给出长度不超过n的一维坐标系,有哪几对坐标间磁石破坏力最大。
输入格式
两个正整数n,k。1<=k<=n<=10000
输出格式
所有小于等于n的素数对。每对素数对输出一行,中间用单个空格隔开。若没有找到任何素数对,输出empty。
1-n里面找所有差为k的素数对
直接筛素数,逐一判断就好了
天天考数论,再不好好练练数论就会被虐死
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define db double
#define int long long
const int N=2e5+10;
bool vis[N];
int n,k;
inline void primes(){
for(int i=2;i<=n;i++){
if(vis[i])continue;
for(int j=i;j<=n/i;j++)vis[j*i]=1;
}
}
signed main(){
cin>>n>>k;
primes();
bool op=1;
for(int i=2;i+k<=n;i++)
if(!vis[i]&&!vis[i+k]){
printf("%d %d\n",i,i+k);
op=0;
}
if(op)printf("empty\n");
}
不以物喜,不以己悲