目录
素数定义
一、打印数字
二、实现并优化代码
?
总结
素数定义
素数不能被1和自身以外的数整除。
一、打印数字
首先我们使用一个for循环先打印出100-200的数字
#include <stdio.h>
int main()
{
int i = 0;
for ( i = 100 ; i <= 200 ; i++)
{
}
return 0;
}
二、实现并优化代码
既然素数的定义是整除的我们即可用 a%b==n进行判断
1、
#include <stdio.h>
int main()
{
int i = 0;
int count = 0;
for ( i = 100 ; i <= 200 ; i++)
{
int j = 0 ; 我们这里定义一个就j对i进行一个试除
for( j = 2 ; j < i ; j++)
{
if( i % j == 0) 当 i能被 他之前的数整除的时候那i不是素数我们跳出循环
{
break:
}
if ( i == j) 当j一直++到等于i时,只能能被自身整除时我们就打印出i
{
count++;
printf("%d ", i);
}
}
printf("/n count = %d/n" ,count );
return 0;
}
我们为了可以判断自己是否输出正确我们可以引入一个count来计算我们100-200之间的素数个数
这是我们得出的答案,当然如果我们不清楚为什么要 i==j 我们可以再引入一个 flag?来更好的理解
#include <stdio.h>
int main()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
int j = 0;
int flag = 1;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
count++;
printf("%d ", i);
}
}
printf("\ncount =%d\n ", count);
return 0;
}
我们一开始让 falg = 1 对i进行判断如果i不是素数我们将flag赋值为0,这样下面if进行判断时不能进行下去,如果i是素数我们可以直接对i打印。
让我们来对代码进行简化
我们知道偶数都不是素数,那我们在打印100-200之间的数字时我们可以直接跳过偶数来优化我们的代码
?注意将i重新赋值为101否则会出现
这样我们就可以跳过偶数达到目的?
进一步优化
我们还能对j的值也进行优化,这就要运用到数学知识。
a = c * d,那其中最少有一个数会<= a开根 ,知道这样的话我们就可以将j的范围从 2到 i-1 进一步缩小到根号i来进一步优化我们的代码
那要输入根号我们要使用sqrt,sqrt(i)即为i开根,为了使用sqrt 我们要引入
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
int count = 0;
for (i = 101; i <= 200; i+=2)
{
int j = 0;
int flag = 1;
for (j = 2; j <=sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
count++;
printf("%d ", i);
}
}
printf("\ncount =%d\n ", count);
return 0;
}
这样我们就进一步的优化了我们的运算速度
总结
我们首先了解题目的目的来打印出100-200之间的数,后面根据素数的定义来完成我们的目的,最后再来优化我们的代码。
这是我第一次发博客,也是我学了c语言第一次这样来分享,我只是个小白要走的路还长 .我一开始是不知道还有这样的优化,也是看了鹏哥的视频知道了有这么多的方法优化代码,鹏哥说的一句话让我感受很深:"我们起初都是小白,只有不断的去看别人写的更好的代码,敲更多的代码,不断的试错我们才能成长,我们代码才能敲的更快,更好。"
|