洛谷 P2640 神秘磁石
阿新 • • 發佈:2017-11-17
大小 str 請問 hold 長度 遠的 單個 枚舉 span
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"; }
洛谷 P2640 神秘磁石