一.素数的判断:
素数的定义:素数是指大于1的自然数,除了1和自己本身外,其他数都不是它的因数。
那么用计算机的语言,咱们可以像这样思考:
思路:
输入一个数i,分别用2到i-1去试除i
i被整除 | i不是素数 |
2~i-1之间没有数可以被i整除 | i是素数 |
按照这个思路咱们可以设计如下这个代码:
#include <stdio.h>
int main()
{
int n = 0;
int i = 0;
int flog = 1;
scanf("%d",&n);
for (i = 2; i <= n - 1; i++)
{
int flog = 1;
if (n % i == 0)
{
flog = 0;
break;
}
}
if (flog == 1)
printf("是素数\n");
else
printf("不是素数\n");
return 0;
}
但是我们不难发现,对于任意一个数n,判断它是不是素数,我们只需要用2~根号n分别对n进行试除(数学问题不做过多解释)
因此代码可以另写为:
#include <stdio.h>
#include <math.h>
int main()
{
int n = 0;
int i = 0;
int flog = 1;
scanf("%d",&n);
for (i = 2; i <= sprt(n) ; i++)
{
int flog = 1;
if (n % i == 0)
{
flog = 0;
break;
}
}
if (flog == 1)
printf("是素数\n");
else
printf("不是素数\n");
return 0;
}
这里特别注意,代码中用到sprt函数,因此头文件中应包含#include <math.h>
即只用把for循环中的 i <= n-1 改为 i <= sprt(n)
以上就是素数的判断。
二.一定范围内素数的查找:
有第一个代码思路的基础,我们可以这样设计第二个代码:
先假设一段数字,列如100~200之间的素数的查找。
定义 int n ,运用for循环使得n从101增加到200。
再定义 int i ,使i从2增加到根号i。
分别用i去试除n,直到 n 模上 i 得到0,就可以判断n不是素数。
#include <stdio.h>
int main()
{
int n = 0;
for (n = 100; n <= 200; n++)
{
int i = 0;
int flog = 1;
for (i = 2; i <= n-1; i++)
{
if (n % i == 0)
flog = 0;
break;
}
if (flog == 1)
printf("%d\n", n);
}
return 0;
}
同理,这里也可以把i的范围改写为 2~sprt(n) ,从而大大简化运算。
三.一定范围内素数个数的判断:
要判断一定范围内的素数的个数,我们定义素数的个数count=多少。
按照刚刚的思路,我们可以设计如下代码:
#include <stdio.h>
int main()
{
int n = 0;
int count = 0;
for (n = 100; n <= 200; n++)
{
int flog = 1;
int i = 0;
for (i = 2; i <= n - 1; i++)
{
if (n % i == 0)
flog = 0;
}
if (flog == 1)
count++;
}
printf ("count=%d\n", count);
return 0;
}
运行后便可以得到100到200之间的素数的个数。