质数是指在大于1的自然数中,除了1和它本身外没有其他因数的自然数。
如果某数除以我们给出的所有可能因数后得到的余数均不为0,即该数不能被除了1和本身以外的其他整数整除,则该数为素数。
故本文主要针对所给的可能因数的范围进行优化。
方法一、时间复杂度O(sqrt(n))
可能因数范围:2到sqrt(n)。【math.h】
如果除余结果为0,输出“不是素数”并return。【类似循环语句的break,此处用作跳出主函数】
否则持续执行至循环结束并输出“是素数”。
#include <stdio.h>
#include <math.h>
int main() {
int n;
scanf("%d", &n);
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
printf("%d不是素数", n);
return 0;
}
}
printf("%d是素数", n);
return 0;
}
方法二、时间复杂度O(sqrt(n)/2)
除2外质数均不能被2整除,故可能因数范围缩小至:3到sqrt(n)间所有奇数
如果n=2,输出“是素数”并return,否则如果n除余2结果为0,输出“不是素数”并return,否则n除余3到sqrt(n)间所有奇数并判断除余结果。
#include