个人技术分享

题目:判断101 - 200之间有多少个素数,并输出所有素数。

解法一:程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

#include <stdio.h>  
#include <math.h>  
#include <stdbool.h>  
  
bool is_prime(int num) {  
    // 0, 1 不是素数  
    if (num <= 1) {  
        return false;  
    }  
    // 只需要检查到sqrt(num)即可  
    for (int i = 2; i <= (int)sqrt(num); i++) {  
        if (num % i == 0) {  
            // 如果能被整除,则不是素数  
            return false;  
        }  
    }  
    // 如果没有找到能整除的数,则是素数  
    return true;  
}  
  
int main() {  
    int num;  
    printf("请输入一个整数: ");  
    scanf("%d", &num);  
      
    if (is_prime(num)) {  
        printf("%d 是素数\n", num);  
    } else {  
        printf("%d 不是素数\n", num);  
    }  
      
    return 0;  
}

解法二:

#include <stdio.h>  
#include <stdbool.h>  
  
bool isPrime(int num) {    
    // 如果数字小于等于1,它不是素数  
    if (num <= 1) return false;    
    // 2是最小的素数  
    if (num == 2) return true;    
    // 如果数字是偶数(除了2),它不是素数  
    if (num % 2 == 0) return false;    
    
    // 检查从3开始的所有奇数是否是num的因子  
    for (int i = 3; i * i <= num; i += 2) {    
        if (num % i == 0)    
            return false;  // 如果找到一个因子,则num不是素数  
    }    
    return true;  // 如果没有找到任何因子,则num是素数  
}
  
int main() {  
    int count = 0;  
    printf("素数(Prime numbers)在101到200之间:\n");  
  
    for (int i = 101; i <= 200; i++) {  
        if (isPrime(i)) {  
            printf("%d ", i);  
            count++;  
        }  
    }  
  
    printf("\n共有 %d 个素数\n", count);  
    return 0;  
}