一. 什么是素数
素数又称质数,指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。因此素数为非负整数。例如:1,2,3都不是素数。
二. 判断100-200之间的数是否为素数,可以用循环语句
分析思路:输入一个数n, 让n除以2,n除以3.... n除以n-1若出现整除,则不是素数。
当出现一个整除的时候,我们要停止循环。可以利用一个小技巧,当flag = 1时,代表为素数,当flag = 0时,n代表不是素数。
第一种方法:(简易法)
//1
#include<stdio.h>
int main()
{
int i = 0;
int j = 1;
for (i = 100; i <= 200; i++)//从100开始,遍历100-200的数
{
for (j = 2; j < i; j++)//所有数都能被本身和1整除,所以这里从2到(i-1)开始判断
{
if (i % j == 0)
{
break;
}
}
//break 跳出循环后,说明不为素数,if条件不满足
if (i == j)//如果内层for循环都走完了,肯定就是i等于j了,从2到本身之前都没有因子,所以为素数
{
printf("%d ", i);
}
}
return 0;
}
第二种方法:(利用一个数判断素数)
//2
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 100; i <= 200; i++)
{
int flag = 1;//利用中间数判断素数要注意每次循环把flag初始化为1,要定义在for 循环内,否则flag可能为0
for (j = 2; j < i; j++) // 所有数都能被本身和1整除,所以这里从2到(i - 1)开始判断
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
printf("%d ", i);
}
}
return 0;
}
第三种方法:(利用平方根求素数)
优点:可以化代码,减少次数。
讲解:
如果有一个整数m,他的开平方跟之前(包括开平方根本身)一定至少有一个能整除这个数的因数,因为m=a*b, a和b至少有一个数字是小于等于开平方m的,比如:25 = 5*5; 16 = 2*8; 16 = 4*4;
但如果一个素数,它的开平方根之前没有整除这个数的因数,那么这个就是用平方根判断是否为素数的依据。
//3
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
int j = 0;
for (i = 101; i <= 200; i++)
{
int flag = 1;//利用中间数判断素数要注意每次循环把flag初始化为1,要定义在for 循环内,否则flag可能为0
for (j = 2; j < sqrt(i); j++)//所有数都能被本身和1整除,所以这里从2到(i - 1)开始判断
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
printf("%d ", i);
}
}
return 0;
}
第四种方法:
//4
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
int j = 0;
for (i = 101; i <= 200; i+=2)
{
int flag = 1;//利用中间数判断素数要注意每次循环把flag初始化为1,要定义在for 循环内,否则flag可能为0
for (j = 2; j < sqrt(i); j++)//所有数都能被本身和1整除,所以这里从2到(i - 1)开始判断
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
printf("%d ", i);
}
}
return 0;
}
第五种方法:写一个函数可以判断一个数是不是素数
#include<stdio.h>
int is_prime(int i)
{
int j = 0;
for (j = 2; j < i; j++)
{
//素数的判断规则,从2到i-1进行尝试
if (i % j == 0)
{
//取模操作符之后如果是0, 就不是素数
return 0;
}
}
return 1;
}
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
//调用判断函数
if (is_prime(i) == 1)
{
printf("%d ", i);
}
}
printf("\n");
return 0;
}