由於給出的l和u太大,直接打表是不可能了。但u-l<=1e6,u<1e9,可以先篩出[0,sqrt(u)]內的素數,再以此去篩[l,u]內的素數,接著求出相鄰距離最短和最遠的一對素數就行了,這步就簡單了。
**如下:
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ll long long
#define ull unsigned long long
#define sz(x) (int)x.size()
#define lowbit(x) ((x) & (-x))
#define mp(a, b) make_pair(a, b)
#define ms(arr, num) memset(arr, num, sizeof(arr))
#define pb push_back
#define f first
#define s second
#define rop freopen("input.txt", "r", stdin);
#define mid(a, b) (a + ((b - a) >> 1))
#define lc rt << 1, l, mid
#define rc rt << 1|1, mid + 1, r
#define lrt rt << 1
#define rrt rt << 1|1
#define bitcount(x) __builtin_popcount(x)
#define bitcountll(x) __builtin_popcountll(x)
#define leftpos(x) 32 - __builtin_clz(x) - 1
#define leftposll(x) 64 - __builtin_clzll(x) - 1
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
using namespace std;
const double eps = 1e-8;
const int maxn = 300 + 10;
const int mod = 1000007;
const int m=1e6+10;
const int n=25;
typedef pairpii;
int n;
bool p1[m],p2[m];
bool judge(ll l,ll r,ll &x1,ll &x2,ll &y1,ll &y2)
}ll a,b;
ll maxx=-1,minn=inf;
for (i=max(2ll,l) ;i<=r;i++)
}for (;i<=r;i++)
a=b;}}
if (maxx>0) return true;
else return false;
}int main()}/*
in: 21 45645
out: 29 31 31397 31469
*/
POJ 2689 區間篩選質數
題意 給定區間 l,u 中,求相鄰兩個質數的 最大 小 差值 所對應的質數 有多組 l,u 規模 1 l u 2,147,483,647,區間長度 1,000,000.型別 經典的區間篩選質數 分析 定理 所有的合數都可以拆分為n個質數的乘積 從l,u的大小 2的32次 明白 最大的質因子 2的16...
大區間素數篩選 POJ2689
題意 給乙個區間 l,u 1 l u 2,147,483,647 u l 1000000,求出 l,u 內距離最近和距離最遠的素數對。由於l,u都小於2 32,所以區間內的合數的最小質因子必然小於2 16,所以先篩出2 16以內的素數,用篩出來的素數去篩 l,u 內的合數。然後把 l,u 內的素數儲...
poj 2689素數篩選
這道題目我就不貼題目了,就是素數篩選題。這道題目差點讓我崩潰,自己太菜的原因,提交了很多次,總是runtime error 後來才知道,素數篩選的範圍這能是2 16,然而這道題給的範圍超出了int的上界,所以,必須要用另外一種方法來篩選,看了人家的部落格,感覺方法超好。這道題有個突破點,就是區間在1...