1. 程式人生 > >C語言 素數判斷,輸出100以內的素數,用逗號分隔,第一個逗號不輸出

C語言 素數判斷,輸出100以內的素數,用逗號分隔,第一個逗號不輸出

/*
質數(prime number)又稱素數,有無限個。
質數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數,這樣的數稱為質數。
*/

#include <stdio.h>
int isPrime(int);//判斷數n是不是素數
void printResult(int);//列印結果
int main()
{
    int i;
    printf("0到100之內的素數:\n");
    for(i=0;i<100;i++)
    {
        printResult(i);
    }
    return 0;
}
/*
質數(prime number)又稱素數,有無限個。
質數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數,這樣的數稱為質數。
*/
int isPrime(int n)//判斷數n是不是素數
{

    if(n<=1)
        return -1;//返回-1表示這個數應該大於1;
    int i;
    int IsPrime=1;//預設不是質數
   //for(i=2;i<=n/2;i++)
//一個數 n 如果是合數,那麼它的所有的因子不超過sqrt(n)
   for(i=2;i<=sqrt(n);i++)
   {
        if(n%i==0)//如果有其他因數
        {
            IsPrime=0;//那就不是質數,用0表示
            break;//退出迴圈
        }
    }
    return IsPrime;//返回標誌
}
void printResult(int n)
{
    static int count=0;//加上static靜態區域性變數,這樣只有第一次呼叫函式的時候count的值為1
    int flag=isPrime(n);//判斷
    if(flag==-1)
        printf("素數是大於1的整數!n=%d輸入錯誤!n要是大於1的整數\n",n);
    else if (flag)
    {
        if(count==1)//第一次呼叫函式時,count為0,第一個逗號不輸出,以後count都為1 輸出逗號分隔素數
            printf(",");
        printf("%-2d",n);
        count=1;
    }

}

結果:

0到100之內的素數:
素數是大於1的整數!n=0輸入錯誤!n要是大於1的整數
素數是大於1的整數!n=1輸入錯誤!n要是大於1的整數
2 ,3 ,5 ,7 ,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97

java實現:

package Ctojava;

public class PrintPrime100
{
	public static void main(String[] args)
	{
		boolean printComma=false;
		for(int i=0;i<=100;i++)
		{
			if(isPrime(i))
			{
				if(printComma)
					System.out.print(",");
				else
					printComma=true;
				System.out.print(i);
				
			}
			
		}
	}
	public static boolean isPrime(int n)
	{
		if(n<=1)
			return false;
		for(int i=2;i<=Math.sqrt(n);i++)
		{
			if(n%i==0)//如果找到一個因數
				return false;//那就不是質數
		}
		//如果沒有找到因數
		return true;//那就是
	}
}
結果:
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97