B3840 [GESP202306 二级] 找素数

小明刚刚学习了素数的概念:如果一个大于 1 的正整数,除了 1 和它自身外,不能被其他正整数整除,则这个正整数是素数。现在,小明想找到两个正整数 A 和 B 之间(包括 A 和 B)有多少个素数。

输入格式

输入只有一行两个正整数 A,B。约定 2≤A≤B≤1000。

输出格式

输出一行,包含一个整数 C,表示找到 C 个素数。

本题的核心就是写一个判断在给定范围内是不是素数如果是则count++;

一下是判断是否是素数函数的片段 因为素数的定义是:如果一个大于 1 的正整数,除了 1 和它自身外,不能被其他正整数整除,则这个正整数是素数,所以我们的for循环只需要循环到 sqrt(num)

因为在 num 的所有因数对 (a, b) 中,至少有一个因数是小于或等于 sqrt(num) 的。例如对于6 sqrt(6)大约等于2.3多,而6可以整除2所以6不是素数,因此,在判断素数的代码中,只需要循环到 sqrt(num) 就可以完成对所有可能因数的检查,从而提高了判断素数的效率。

int sushu(int num) {
    
    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) {
            return 0;
        }
    }
    return 1;
}

以下代码是执行如果是素数则count++,以符合题目要求;

for (int i = a; i <= b; i++) {
        if (sushu(i)) {
            count++;
        }
    }

一下是完整代码

#include 
#include 


int sushu(int num) {
    if (num < 2) return 0;
    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) {
            return 0;
        }
    }
    return 1;
}

int main() {
    int a, b;
  
    scanf("%d %d", &a, &b);
    int count = 0;

    for (int i = a; i <= b; i++) {
        if (sushu(i)) {
            count++;
        }
    }
    
    printf("%d\n", count);
    return 0;
}    

你可能感兴趣的:(算法,数据结构)