1. 程式人生 > >洛谷 P2640 神秘磁石

洛谷 P2640 神秘磁石

大小 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 神秘磁石