题解 | #KiKi求质数个数#


#include <stdio.h>
int main() {
    /* 方法1:
        求素数数量,总数减非素数数量

        int totalNum = (999 - 100) + 1;
        int count = 0;
        for (int i = 100; i < 1000; i++)
        {
            for (int j = 2; j * j <= i; j++)
            {
                if (i % j == 0)
                {
                    count++;
                    break;
                }
            }
        }
        printf("%d\n", totalNum - count);
    */

    /* 方法2:
        用flag标记,1为素数,0为非素数;
        默认flag为1,若在内循环i被j整除,则设flag为0,表示i为非素数;
        内循环判断完后判断flag值,flag为1则prime++;
        注意要将flag重置为1

    int prime = 0, flag = 1;
    for (int i = 100; i < 1000; i++) {
        for (int j = 2; j * j <= i; j++) {
            if (i % j == 0) {
                flag = 0;
                break;
            }
        }
        if (flag == 1) {
            prime++;
        }
        flag = 1;
    }
    printf("%d\n", prime);
    */

    /* 方法3:
        当j * j <= i时,i % j == 0,那么说明i能被j整除,i不是素数
        当j * j > i时,说明i % j != 0,说明i不能被j整除,i是素数
        注意除数j重置为2,因为j的作用域为整个外循环
    */
    int cnt = 0;
    int i, j;
    for (i = 100; i < 1000; i++) {
        for (j = 2; j * j <= i; j++) {
            if (i % j == 0) {
                break;
            }
        }
        if (j * j > i) {
            cnt++;
        }
        // Reset divisor
        j = 2;
    }
    printf("%d\n", cnt);
    return 0;
}

全部评论

相关推荐

12-04 15:36
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务