<center style="color&#58;rgb&#40;51&#44;51&#44;51&#41;&#59;font&#45;family&#58;&#39;Helvetica Neue&#39;&#44; Helvetica&#44; Arial&#44; sans&#45;serif&#59;font&#45;size&#58;14px&#59;">

wsw追妹记

时间限制: 1 Sec   内存限制: 128 MB
</center>

题目描述

wsw喜欢上了一个小姐姐,小姐姐现在遇到了一道复杂的数学问题;
对于a(x)为小于等于x的素数个数;
wsw数学经常考零分,现在非常焦急,请你帮帮他吧。

输入

第一行输入一个整数t表示有t组数据。

接下来t行每行两个数字r,l(1<=l<=r<=10000000)

对于每组数字输出a(r)-a(l)

样例输入

2
3 2
7 2

样例输出

1
3

解题思路

直接打表暴力。

#include <stdio.h>
#include <math.h>
int isprime[10000010];
void prime(int n) {
    int i, j, m;
    for (i = 0; i <= n; i++)
        isprime[i] = 1;
    isprime[0] = isprime[1] = 0;
    m = (int)sqrt(n);
    for (i = 2; i <= m; i++) {
        if (isprime[i]) {
            for (j = 2 * i; j <= n; j += i)
                isprime[j] = 0;
        }
    }
}
int main() {
    prime(10000000);
    int n, m, i, ans, t, a, b;
    scanf("%d", &t);
    while (t--) {
        ans = 0;
        scanf("%d %d", &a, &b);
        for (b++; b <= a; b++) {
            if (isprime[b])
                ans++;
        }
        printf("%d\n", ans);
    }
    return 0;
}