码迷,mamicode.com
首页 > 编程语言 > 详细

用C语言实现:打印100-200之间的素数。

时间:2017-09-19 23:10:22      阅读:363      评论:0      收藏:0      [点我收藏+]

标签:其他   sqrt   math   了解   c语言   定义   设置   ges   函数   

在编程之前,首先我们要了解素数的定义:在大于1的自然数中,除了1和它本身以外不再有其他因数。

因此,我们会最先想到一个方法:设100~200间的这个数是i,用i去分别除以2~(i-1)间的每一个数。

即:

#include<stdio.h>
int main()
{
 int i, j;
 for (i = 100; i <= 200; i++)
 {
  for (j = 2; j <= i-1; j++)
  {
   if (i%j == 0)
    break;//如果能整除就跳出该次循环,避免多余运算
  }
  if (j==i)//该条件代表没有整除。
   printf("%d ", i);
 }
 printf("\n");
 system("pause");
 return 0;
}

但是运用这种方法进行编程,会使代码过于繁琐,系统执行速度较慢,所以我们继续探究是否能将该代码进行优化。

这里有两种优化的方法:

第一种:因为i不可能整除比i/2更大的数,所以我们可以设置第3个变量t,用来存储i/2的值。

#include<stdio.h>
int main()
{
 int i, j,t;
 for (i = 100; i <= 200; i++)
 {
  t = i / 2;
  for (j = 2; j <= t; j++)
  {
   if (i%j == 0)
    break;
  }
  if (j>t)
   printf("%d ", i);
 }
 printf("\n");
 system("pause");
 return 0;
}

第二种:相比于i/2,用t来储存i的平方根会更加优化这种算法。但这种算法需要引入新的头函数math.h,和新的函数sqrt()开方函数。

#include<stdio.h>
#include<math.h>
int main()
{
 int i, j, t;
 for (i = 100; i <= 200; i++)
 {
  t = sqrt(i);//开方函数
  for (j = 2; j <= t; j++)
  {
   if (i%j == 0)
    break;
  }
  if (j>t)
   printf("%d ", i);
 }
 printf("\n");
 system("pause");
 return 0;
}

到这一步我们只是优化了内循环过程,我们还可以对外循环进行优化。

我们都知道100~200之间的偶数不可能是素数,因此我们可以人为的令i初始化为101,并每次循环时令其+2。

#include<stdio.h>
#include<math.h>
int main()
{
 int i, j, t;
 for (i = 101; i <= 200; i+=2)
 {
  t = sqrt(i);
  for (j = 2; j <= t; j++)
  {
   if (i%j == 0)
    break;
  }
  if (j>t)
   printf("%d ", i);
 }
 printf("\n");
 system("pause");
 return 0;
}

通过这样的优化一下子就会使我们的程序计算量减少一半,对提升程序的效率十分有效。

最后附上程序运行后的结果:

技术分享

用C语言实现:打印100-200之间的素数。

标签:其他   sqrt   math   了解   c语言   定义   设置   ges   函数   

原文地址:http://www.cnblogs.com/xiefei777/p/7554083.html

(1)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!