第一次尝试
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int isPrimeNum(int num) {
if (num == 0 || num == 1) {
return 0;
}
for (int i = 2; i < num; i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int main() {
printf("请输入一个数:\n");
int num = 0;
scanf("%d", &num);
if (isPrimeNum(num) == 0) {
printf("不是素数!\n");
}
else {
printf("是素数!\n");
}
for (int i = 100; i <= 200; i++) {
if (isPrimeNum(i) == 1) {
printf("%d ",i);
}
}
return 0;
}
此代码利用函数的封装功能,将判断的函数封装起来,不影响主函数可读性,用户输入一个数字,判断是否是素数;另外在判断的时候,要考虑到所有情况,0,1
要单独列出来判断(处理异常)
第二次尝试
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include <math.h>
int isPrimeNum(int num,int nums) {
if (num == 0 || num == 1) {
return 0;
}
for (int i = 2; i <= nums; i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int main() {
printf("请输入一个数:\n");
int num = 0;
int nums = 0;
scanf("%d", &num);
nums = (int)sqrt((double)num);
if (isPrimeNum(num,nums) == 0) {
printf("不是素数!\n");
}
else {
printf("是素数!\n");
}
for (int i = 100; i <= 200; i++) {
nums = (int)sqrt((double)i);
if (isPrimeNum(i,nums) == 1) {
printf("%d ",i);
}
}
return 0;
}
在上一个代码中,处理的过程不够优化,在判断n是否是素数时,只需判断n
能否被2~sqrt(n)
整除即可,所以不必判断那么多次。