实现C语言打印1-100之间的素数
定义:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
方法一 试除法
依次遍历 挑选出符合条件的数字打印
1.创建一个嵌套循环,实现遍历
int i = 0, j = 0;
for (i = 2; i <= 100; i++)
{
for (j = 2; j <= i; j++)
{
}
}
2.设定条件
if (i % j == 0)
{
break;
}
if (i == j)
{
printf("%d ",i);
}
完整代码实现
#include
int main()
{
int i = 0, j = 0;
for (i = 2; i <= 100; i++)
{
for (j = 2; j <= i; j++)
{
if (i % j == 0)
{
break;
}
}
if (i == j)
{
printf("%d ",i);
}
}
return 0;
}
去偶数法
已知在1-100之内偶数永远不可能是素数 所以每次i可以跳过偶数
1.如上创建嵌套循环 不过此处进行一个小优化 把判断条件使用一个flag数进行判断
int i = 0,j = 0;
printf("2 ");
for (i = 3; i <= 100; i += 2)
{
int flag = 1;
for (j = 2; j < i; j++)
{
}
}
2.符合条件进行打印 需要注意的是直接去除偶数的话 会缺少了一个2 需要补上
if (i % j == 0)
{
flag = 0;
break;
}
if (flag == 1)
{
printf("%d ",i);
}
完整代码实现
#include
int main()
{
int i = 0,j = 0;
printf("2 ");
for (i = 3; i <= 100; i += 2)
{
int flag = 1;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ",i);
}
}
return 0;
}
sqrt()函数法
在sqrt开方下会产生两个数 一个数如果为非素数的话 那么它肯定依然可以取模。这样子循环只要一半 提高了效率。
#include
#include
int main()
{
int flag = 0;
for (int i = 2; i <= 100; i++)
{
flag = 1;
for (int j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ",i);
}
}
return 0;
}
注 在三种方法条件下 可以结合使用 提高效率,例如方法2+方法3 跳过偶数和开方 能减少更多的循环次数。