天天看點

怎麼列印100--200之間的素數

問題:列印100---200之間的素數,并得出個數。

1.首先我們要了解 “ 素數 (質數)”,就是大于1的自然數,除了1和自身之外沒有别的因數。

循環解決問題:

試除法

#include<stdio.h>

int  main()

{

int i=0;

int  count=0;

for(i=100;i<=200;i++) //第一個循環

{

int  j=0;//    j的取值範圍為 : 2<j<i-1

for(j=2;j<i;j++)  //第二個循環語句

{

if(i%j==0)  //說明在規定的區間範圍内有可以被i整除的數

break;  //不滿足,是以跳出第二個循環語句

}

if(i==j)  

{

printf("%d\n",j);

count++;

}

}

printf("\ncount=%d\n",count);

return  0;

}

第二種:優化,減少了整除的次數

#include<stdio.h>

#include<math.h>    //這裡是sqart的頭檔案

int  main()

{int i=0;

int  count=0;

for(i=100;i<=200;i++) //第一個循環

{

int  j=0;//    j的取值範圍為 : 2<j<i-1

for(j=2;j<sqart(i);j++)  //第二個循環語句

{

if(i%j==0)  //說明在規定的區間範圍内有可以被i整除的數

break;  //不滿足,是以跳出第二個循環語句

}

if(j>sqart(i))  

{

printf("%d\n", i);

count++;

}

}

}

printf("\ncount=%d\n",count);

  return  0;

}

或者還可以進一步簡化,就是在for語句内改為(i=101;i<=200;i+=2)

第三種:函數的運用

#include<stdio.h>

int  is_prime(int n)

{

int  j=0;

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

{

if(i%j==0)

return 0;

}

return  1;

}

int  main()

{

int  i=0;

for(i=100;i<=200;i++)

{

if( is_prime(i)==1)

printf("%d   \n",i);

}

return  0;

}