题目描述
人与龙和谐相处的博克岛上正在举办喜羊羊版的魁地奇,龙骑士们通过抓羊和把羊投入篮筐来得分,如果能抓到皮肤黝黑的沸羊羊还能获得额外的分数奖励。
当然,如果比分这样算就太没意思了,现在规定一种新的得分机制:假设篮筐中黑羊为a只,白羊为b只,那他们的得分就是a,b之间(不含a,b)所有素数的和。由于数字可能比较大,现邀你来完成最后得分的计算。
输入
有多组测试样例,输入直到文件末尾。每组样例占一行, a b (0<=a,b<=65536)
输出
对每组样例输出占一行,输出内容为a,b之间(不含a,b)所有素数的和。
样例输入
2 10
23 90
39 1224
样例输出
15
863
111390
思路:
用埃及筛筛出范围内的素数,然后相加。
#include <stdio.h>
int f(int flat[70000], int x, int y)
{
int i,j;
int sum = 0;
for (i = 2; i < y; i++)
{
if (!flat[i])
{
for (j = i * 2; j < y; j += i)
{
flat[j] = 1;
}
}
}
for (i = x + 1; i < y; i++)
{
if (!flat[i]&&i!=1) sum += i;
}
return sum;
}
int main()
{
int blacksheep, whitesheep;
int flat[70000] = { 0 };
while (scanf("%d %d", &blacksheep, &whitesheep) != EOF)
{
if (blacksheep > whitesheep)
{
printf("%d\n", f(flat, whitesheep, blacksheep));
}
else
{
printf("%d\n", f(flat, blacksheep, whitesheep));
}
}
return 0;
}