洛谷 P2640 神秘磁石
题目背景
在遥远的阿拉德大陆,有一种神秘的磁石,是由魔皇制作出来的,
题目描述
1.若给他一个一维坐标系,那么他的磁力一定要在素数坐标的位置上才能发挥的最大(不管位置坐标的大小,只要是素数那么磁力就一样大)
2.若两个磁石相距为k,那么磁石间的破坏力将会达到当前磁力的峰值
显然,两磁石间最大破坏力取决于磁力大小和磁石间距,那么请问给出长度不超过n的一维坐标系,有哪几对坐标间磁石破坏力最大。
输入输出格式
输入格式:
两个正整数n,k。1<=k<=n<=10000
输出格式:
所有小于等于n的素数对。每对素数对输出一行,中间用单个空格隔开。若没有找到任何素数对,输出empty。
输入输出样例
输入样例#1: 复制
6924 809
输出样例#1: 复制
2 811
思路:欧拉筛素数,然后暴力枚举
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define MAXN 10010 using namespace std; int n,k,num,ans; int prime[MAXN]; bool yes[MAXN]; void shai(){ memset(yes,true,sizeof(yes)); yes[1]=false; for(int i=2;i<=n;i++){ if(yes[i]) prime[++num]=i; for(int j=1;prime[j]*i<=n;j++){ yes[prime[j]*i]=false; if(i%prime[j]==0) break; } } } int main(){ scanf("%d%d",&n,&k); shai(); for(int i=1;i<=num;i++) for(int j=i+1;j<=num;j++) if(prime[j]-prime[i]==k){ ans++; cout<<prime[i]<<" "<<prime[j]<<endl; } if(!ans) cout<<"empty"; }
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。
雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。