打印输出100-200之间的素数

  • Post author:
  • Post category:其他


打印输出100-200之间的素数,三种方法,下面一一介绍
第一种,也是最原始的方法
#include<stdio.h>
int main()

{

int i = 0;

int j = 0;

printf(“100-200之间的素数:”);

for (i = 100; i <= 200; i++)        //100-200之间的数

{

for (j = 2; j < i; j++)

{

if (i%j == 0)    //判断是否为素数

{

break;        //若i可以被j整除,则不是素数,跳出此循环继续下一个i循环。若不能被整除,继续循环j的循环,直到不能满足条件跳出,此时的i就是素数。
}

}

// 跳出j循环的两种可能:1.i可以被j整除,此时i不是素数 2.j循环循环完了即循环条件不能满足时,也没有可以被整除的数,第二种可能说明此时i就是素数

if (i == j)          //j循环完了即循环条件不再满足for循环,此时还没有找到被整除的数,所以此时的i就是素数

{

printf(“%d “, i);

}

}

return 0;

}
第二种方法,稍作优化

#include<stdio.h>

#include<math.h>

int main()

{

int i = 0;

int j = 0;

printf(“100-200之间的素数:”);

for(i=100; i<=200; i++)   //100-200之间的素数

{

//任何一个不是素数的数都可以分解成比它的开方一个大一个小的两个数相乘的数。例如16,开方为4,则2和8就是比4一个          大一 个小的数,此时只需要判断这个数能不能被比它开方小的数整除,如果可以,就不是素数,不用再判断能不能整除比           它的开方大的数。

for(j=2; j<=sqrt(i); j++)     //2到sqrt(i)之间的数。注意此时j应该<=sqrt(i) 不能只是小于。举个例子,例如9,如果只是小于,就会将9归为素数,而实际上9不是素数。

{

if(i%j==0)

{

break;      //如果可以整除,跳出j的循环,继续下一个i的循环。如果不能整除,继续j的循环,直到条件不能再满足也没有找到可以被整除的数 ,此时的i就是素数。

}

}

//跳出j循环有两种可能:1.i不能被j整除,此时i不是素数。2.j的循环条件执行完也没有找到可以整除的数,此时i就是素数。

if(j>sqrt(i))   //j循环完了也没有找到可以整除i的数,表示此时的i就是素数

{

printf(“%d “,i);

}

}

return 0;

}

第三种方法, 在第二种方法上再做优化
#include<stdio.h>

#include<math.h>
int main()

{

int i=0;

int j=0;

printf(“100-200之间的素数:”);

for(i=101; i<=200; i+=2)        //所有的偶数都不是素数,所以只需要判断100-200之间的奇数是不是素数 。

{

for(j=2; j<=sqrt(i); j++)          //此处与第二种方法解释相同

{

if(i%j==0)

{

break;

//此处与第二种方法解释相同


}

}

if(j>sqrt(i))

//此处与第二种方法解释相同
{

printf(“%d “,i);

}

}

return 0;

}



版权声明:本文为windyJ809原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。