素數判定

2020-08-10 10:33:32
//素數判定(有問題)
/*n=1或n太大時請勿呼叫
n=1時錯誤判斷爲素數
n過大時i*i可能會溢位*/
int isprime(int n)
{
 for(int i=2;i<n;i++)
 {
  if(n%i==0)
  {
   return 0;
  }
  return 1;
 }
}
/*注意這裏使用了兩個小技巧 :
1.只判斷不超過sqrt(x)的整數i
2.及時退出                */ 
int isprime(int n)
{
	if(n<=1)
	{
		return 0;
	}
	int m=floor(sqrt(n)+0.5);
	for(int i=2;i<=m;i++)
	{
		if(n%i==0)
		{
			return0;
		}
	}
	return 1}
//特判n=1情況
//變數m的使用避免了重複計算,通過四捨五入避免了浮點誤差