7 条题解

  • 0
    @ 2025-10-7 14:12:18
    #include<stdio.h>
    // #include<iostream>
    // using namespace std;
    const int x = 1005000;
    int flag [x];
    void no_prime() {//用埃氏筛,先筛一遍
        flag[1] = 1;
        flag[0] = 1;
        for (int i = 2; i < x; i++) {
            if (flag[i] == 0) {
                for (int j = 2 * i; j < x; j += i) {
                    flag[j] = 1;
                }
            }
        }
    }
    int main() {
        no_prime();
        int n, m;
        scanf("%d",&n);
        while (n--) {
            scanf("%d",&m);
            int arr[1000000] = {0};
            int temp = 0;
            for (int i = 2; i <= m; i++) {
                if (flag[i] == 0) {
                    arr[++temp] = i;
                }
            }
            int count = 0; // 注意temp的取值范围,非常容易错
            for (int i = 1; i < temp ; i++) {
                if (arr[i + 1] - arr[i] == 2 || arr[i + 1] - arr[i] == 1) {
                    count++;
                }
            }
            printf("%d\n",count);
        }
    }
    

    信息

    ID
    128
    时间
    3000ms
    内存
    128MiB
    难度
    8
    标签
    (无)
    递交数
    1742
    已通过
    236
    上传者