ヽ( ̄ω ̄( ̄ω ̄〃)ゝ

————————————————————————

目录

一、了解素数概念

二、判断100-200的素数


一、了解素数概念

首先素数就是质数,两种叫法都可以,素数就是☞除了1和本身作为因子外,没有其他因子作为除数,比如3,只能被1和3整除,(即1和本身),故为素数,而4,除了能被1和本身4整除以外,还能被2整除,所以他就不是素数,我们称它为合数

二、判断100-200的素数

1.判断素数 –简易法

#includeint main(){int i = 101;int j = 0;for (i = 101; i < 200; i++)//因为100,200是偶数肯定不是素数,所以从101开始,遍历101-199的数{for (j = 2; j < i; j++)//所有数都能被本身和1整除,所以这里从2到要判断的数-1即可{ if (i % j == 0){break;}}//break跳出循环后,说明不为素数,if条件不满足if (i == j)//如果内层for循环都走完了,那肯定i等于j了,从2到本身之前都没有因子,所以为素数{printf("%d ", i);}}return 0;}

2.利用中间数判断素数

#includeint main(){int i = 101;int j = 0;for (i = 101; i < 200; i++)//因为100,200是偶数肯定不是素数,所以从101开始,遍历101-199的数{int flag = 1;//利用中间数判断素数要注意每次循环把flag初始化为1;要定义在for循环内 否则flag可能为0for (j = 2; j < i; j++)//所有数都能被本身和1整除,所以这里从2到要判断的数-1即可{if (i % j == 0){flag = 0;break;}}if (flag){printf("%d ", i);}}return 0;}

3.平方根求素数

优点:

可以优化代码,减少次数 。

讲解:

*重点*)如果有一个合数m,他的开平方根之前(包括开平方根本身)一定至少有一个能整除这个数m的因数,因为m = a*b a和b一定至少有一个数字是<=开平方m的,比如16=2*8,16=4*4,所以只要找到m的开平方根之前(包括本身,因为可能等于开平方本身)有没有可以除了1和本身外整除m的因子,有则不是质数,是合数。但是如果是一个素数,他的开平方根之前一定没有一个能整除这个数m的因数。那么这个就是使用平方根判断是否为素数的依据!

比如7,int类型的7,它开平方根是2(因为int类型的整除是舍去小数点后面的),那么2到2,没有7能整除的吧!再比如13,int类型的13,它开平方根是3,那么2到3,没有13能整除的吧!那么7和13均是素数。

相反,若这个数是一个合数。比如6,它开平方根是2,2到2,6正好能整除2吧!所以他不是素数(那就是合数),再比如8,它开平方根是2,2到2,8正好能整除2吧!所以他不是素数

#include#include//sqrt头文件int main(){int i = 101;int j = 0;for (i = 101; i < 200; i++)//因为100,200是偶数肯定不是素数,所以从101开始,遍历101-199的数{for (j = 2; j sqrt(i)if (j > sqrt(i))//满足这个条件才是素数,或者可以利用中间数求也可以{printf("%d ", i);}}return 0;}

4.平方根+去偶数求法

#include#include//sqrt头文件int main(){int i = 101;int j = 0;for (i = 101; i <= 200; i += 2)//偶数肯定不是素数,所以直接判断奇数就可以,这样又可以再一次优化{for (j = 2; j  sqrt(i))//满足这个条件才是素数,或者可以利用中间数求也可以{printf("%d ", i);}}return 0;}

5、函数法

这个方法不用你用break,直接调用函数,发现不满足条件的直接return终止函数,减少了麻烦的过程,个人更喜欢这种。注意下面是求100-200之内的素数,如果说让你求1-100的素数,那么你的函数之内应该添一条if(n == 1) return 0;

#include#include//sqrt头文件int Isprime(int n){int i = 0;for (i = 2; i <= sqrt(n); i++){if (n % i == 0){return 0;//不是素数,直接终止函数}}return 1;}int main(){int i = 101;int j = 0;for (i = 101; i <= 200; i += 2)//偶数肯定不是素数,所以直接判断奇数就可以,这样又可以再一次优化{if (Isprime(i)){printf("%d ", i);}}return 0;}