Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
很多数据都测试过了成功了,句子也确定没有错但还是WA...不知道什么情况#include <stdio.h> #include <cstring> #include <algorithm> #include <vector> #include <iostream> using namespace std; typedef unsigned int ll; int offset_numbers[2000001]; bool sqrt_b[50001]; int n = 0; #include <cmath> void prime_block(ll l,ll r) { int maxl = (int)sqrt((double)l); int maxv = (int)sqrt((double)r); if(maxl == 0) { maxl = 2; sqrt_b[0] = true; sqrt_b[1] = true; } for (ll i = maxl; i <= maxv+1 ; ++i) { if(!sqrt_b[i]) { for (ll j = 2*i; j*j <= r; j+=i) { sqrt_b[j] = true; } } } } void prime_kk(ll l,ll r) { int maxv = (int)sqrt((double)r); for (ll i = 2; i <= maxv+1; ++i) { if(!sqrt_b[i]) { for (ll k = l%i == 0?l: l + i - l%i ; k < r; k+=i) { if(k == i) { continue; } if(k>3) { offset_numbers[k-l] = 1; } } } } if(l == 1) { offset_numbers[0] = 1; } } int main() { ll l,r; memset(sqrt_b,0, sizeof(sqrt_b));//假设全为质数 prime_block(0,50000); while (~scanf("%d %d",&l,&r)) { int mind = 1000001,maxd = 0; int minl,minr,maxl,maxr; memset(offset_numbers,0, sizeof(offset_numbers));//假设全为质数 prime_kk(l,r); int m = 0; int haved = false; while (m<=r-l) { if(!offset_numbers[m] && m <=r-l-1) { int i = m+1; for (;offset_numbers[i] ; ++i) {} offset_numbers[m] = i-m-1; haved = true; if(mind > i-m) { mind = i-m; minl = m; minr = i; } if(maxd < i-m) { maxd = i-m; maxl = m; maxr = i; } m = i; } else { m++; } } if(haved) { printf("%d,%d are closest, %d,%d are most distant.\n",minl+l,minr+l,maxl+l,maxr+l); } else { printf("There are no adjacent primes.\n"); } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator