c語言問題,求高手指教,一個C語言問題,求高手指教!

時間 2021-09-06 10:35:09

1樓:匿名使用者

典型的求素數的**,這是等於是可能的

如果不是素數,那麼k不等到i就break跳出迴圈了,這個你明白

所以k小雨i的時候就不是素數

如果是素數,那麼k會迴圈到i,這個是for的機制得出的。那麼k和i相等

所以判斷是否是素數的條件就是判斷k和i是否相等

只要k不大於i即使素數,大於等於包含等於,所以可以這樣來判斷是否是素數

for(初始化變數;判斷語句;改變迴圈條件)

for最後執行的必然是判斷語句,倒數第二個語句是改變迴圈條件語句,這個你該明白。

所以當是素數跳出迴圈的時候,那麼k的值只能是i

k大於i肯定不能,這個一看**誰都知道。

break只能跳出一層迴圈

求素數不要糾結,其實這個就是經典的**

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

if (i % k == 0)

break ;

這一塊是必須的,改變的只是k的迴圈範圍,如i/2了,sqrt(i)了。這個只是為了效率而已

這塊是必須的,但是這個迴圈只是得出一個結果,那就是k的值到底是多少

是不是素數,這裡還看不出,所以下面需要一個判斷k和i的大小

ki的大小決定i是否是素數

這也就是break的作用了,如果整除,那麼在中間就會跳出迴圈,不等k < i 這個就跳出

如果是素數,那麼k和i相等的時候才不符合k < i這個條件

所以最好判斷素數的條件就是ki是否相等

上面說了,大於等於包含等於

2樓:鬼扯石室

你好~!

我認為:

①原程式是正確的。在if(k>=i)之前有

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

if (i % k == 0)

break ;

這是整個內層迴圈,當這個內層迴圈執行完畢後,就說明當前的k已經是一個素數了

此時只需要再判斷k是否不比i小,如果成立,那就滿足了:1)k是素數;2)k大於m的條件了

第一次找到這樣的i後,便將這個i作為fun函式的返回值,並跳出fun函式

這就是緊隨m的第一個素數了!

②break跳出當前一層迴圈。這裡外層迴圈雖然沒有break,但是有return作為函式中止的指令。

3樓:光霖

這題是素數的固定求法。if (i % k == 0) break ;表示的是當i被k整除時,跳出內層迴圈,然後判斷i與k的關係。if (k >=i)其實等價於if (k==i)。

因為如果為素數,那麼當k一直執行到i-1時,仍不滿足(i % k == 0),所以還會繼續執行k++,這時已經判定i為素數了。此時i % k == 0成立,那麼再執行下一句:。if (k >=i),這時k剛好等於i,成立。

那麼返回素數i的值

4樓:匿名使用者

因為你不懂i和k 分辨代表什麼~~ i 表示比m大的數~ 從m+1開始判斷,如果i是素數 則返回i的值

那麼又如何判斷i是不是素數呢? 這裡就引入k,k從1開始逐次+1,判斷i能否能被k整除,如果到最後i都不能被k整除,那麼i就是素數,而且這時候k的值會大於i(具體k的值=i+1),如果在期間i能整除k了~ 那麼就直接跳出內迴圈,進行i自身加1操作並檢測這時候的i是否為素數。

簡單的C 問題,求高手指教,一個簡單的C 問題,求高手指教

64 bit unsigned integer是指64位無符號數 include include using namespace std unsigned long long jiechen unsigned long long n,unsigned long long m 1 int main f...

c語言問題求高手解答,C語言問題求高手解答

幫你寫好了,這裡幫你編譯執行了,沒任何問題,不放心的話你自己試試struct staff int main void if head null puts 沒有任何資料,抱歉!else current head while current null current head while current...

C語言解決排列組合問題請高手指教

前縈懷 include 陣列a 10 為固定值,一共10個數字,每個元素的值分別為1,1,1,2,2,4,5,3,4,2,另有三個不相關的變數值2,3,4 這三個數字以任意的排列組合加到陣列a的某一個 或幾個元素中 可以全部加到a 1 上,也可以加到a 2 a 3 a 8 上 隨意加的 這三個變數只...