【C语言】打印100~200之间的素数

【素数】:除了本身和1能被整除,其余不能被整除。

【方法1】
假设n是素数,只能被1和本身n整除,那么就说明2~n-1之间没有数整除。(面试时,此方法不宜推荐使用)

int main()
{
 int i = 0;
 for(i = 100; i <= 200;i++)
 {
  int j = 0;
  for(j = 2;j <= i;j++)
  {
   if(i % j == 0)
   {
    break;
   }
  }
  if(j > =i)
  {
   printf("%d\n",i);
  }
 }
 return 0;
}

【方法2】
类比于方法1,减少其循环次数
对于任何一个数n=a*b,那么a和b之间必定有一个数时小于等于n/2的,比如:9=3 * 3;9=1 * 9 ,则2 ~ i之间可优化为2 ~ i/2。

int main()
{
 int i = 0;
 for(i = 100; i <= 200;i++)
 {
  int j = 0;
  for(j = 2;j <= i/2;j++)
  {
   if(i % j == 0)
   {
    break;
   }
  }
  if(j > i/2)
  {
   printf("%d\n",i);
  }
 }
 return 0;
}

【方法3】
再进行优化。同理,对于任何一个数n=a*b,那么a和b之间必定有一个数时小于等于根号n的。比如8=1 * 8;8= 2 * 4,则2 ~ i之间可优化为2 ~ 根号n。
(注意sqrt函数的用法)

int main()
{
 int i = 0;
 for(i = 101; i <= 200;i += 2)//i += 2是i++的优化,去掉偶数
 {
  int j = 0;
  for(j = 2;j <= sqrt((double)i);j++)//强制类型转换
  {
   if(i % j == 0)
   {
    break;
   }
  }
  if(j > sqrt((double)i))
  {
   printf("%d\n",i);
  }
 }
 return 0;
}

运行结果都如下所示:
在这里插入图片描述

发布了20 篇原创文章 · 获赞 23 · 访问量 575

猜你喜欢

转载自blog.csdn.net/m0_45097186/article/details/102536960