題目:計算一個區間內,連續素數的差值的眾數,如果有多個或沒有就認為不存在。
分析:數論。直接打表計算素數,然後直接枚舉統計輸出即可。
說明:不要用while(scanf("%d")!=EOF),會TLE,╮(╯▽╰)╭。
#include <cstring>
#include <cstdio>
int visit[1000005];
int prime[78500];
int cut[120];
int main()
{
int count = 0;
memset(visit, 0, sizeof(visit));
for (int i = 2; i < 1000004; ++ i)
if (!visit[i]) {
prime[count ++] = i;
for (int j = i+i; j < 1000004; j += i)
visit[j] = 1;
}
int n, L, U;
scanf("%d",&n);
while (n --) {
scanf("%d%d",&L,&U);
memset(cut, 0, sizeof(cut));
for (int i = 0; i < count; ++ i) {
if (prime[i+1] > U) break;
if (prime[i] >= L && prime[i+1] <= U)
cut[prime[i+1]-prime[i]] ++;
}
int max = 0;
for (int i = 1; i < 120; ++ i)
if (cut[max] < cut[i])
max = i;
int count = 0;
for (int i = 1; i < 120; ++ i)
if (cut[max] == cut[i])
count ++;
if (max < 1 || count > 1)
printf("No jumping champion\n");
else printf("The jumping champion is %d\n",max);
}
return 0;
}