c語言關於sqrt判斷素數原理的理解

2021-10-19 09:06:53 字數 962 閱讀 4337

素數定義:只能分解成1和本身兩個因數

int n,i;

double s;

scanf

("%d"

,&n)

;

(注意此處的s不能取int型別,否則單步除錯它s的值會與n是偶數時相等容易引起混淆)

假設輸入乙個數36

s = sqrt(36) //s = 6;

for

( i=

2;i<=s;i++)}

if( i>s )

printf

("是素數");

else

printf

("不是素數"

);

很顯然程式第一步就會判定不是素數

因為36%2的值已經是0

我們暫時不看break語句

36%i也就是會i最多取到6這個數字

當i = 6時36%6 == 0;

i≯sprintf不是素數

我們再將36換成37試試看

s = sqrt(37) //計算器得出s≈6.083

可見s是大於6的

這時i可以從2開始取到7

37%1到6都不為0

此時i為6還要++變為7

i > s

則可以printf此數是素數

下列為程式示例:

#include

#include

intmain()

}if( i>s )

else

return0;

}

這裡有很多新手不理解為什麼i回到素數的定義

也就是說n取餘2到n-1中的所有數都不能為0.

如有錯誤,還請各位多加指正!

C語言 判斷素數

1 判斷所輸入的整數是否為素數 除1以外只能被1和它本身整除的自然數 include 包含標準庫的資訊 intmain void 每個程式都從main函式的起點開始執行 printf 是素數 n return0 2 求100 200之間的全部素數 include 包含標準庫的資訊 include 標...

C語言判斷素數(求素數)

素數又稱質數。所謂素數是指除了 1 和它本身以外,不能被任何整數整除的數,例如17就是素數,因為它不能被 2 16 的任一整數整除。思路1 因此判斷乙個整數m是否是素數,只需把 m 被 2 m 1 之間的每乙個整數去除,如果都不能被整除,那麼 m 就是乙個素數。思路2 判斷方法還可以簡化。m 不必被...

判斷素數原理

正整數a,設它的平方根為q 1 如果存在乙個大於1小於q的整數可以整除a,則必然存在乙個大於q小於a的整數可以整除a 2 如果不存在乙個大於1小於q的整數可以整除a,則必然也不存在乙個大於q小於a的整數可以整除a。先證明第1條 設b是乙個大於1小於q的整數,且b可以整除a。按整除的定義存在乙個整數c...