素數距離問題

2021-08-28 16:35:31 字數 1611 閱讀 3175

時間限制:3000 ms  |  記憶體限制:65535 kb

難度:2

輸入第一行給出測試資料組數n(0輸出

每行輸出兩個整數 a b.

其中a表示離相應測試資料最近的素數,b表示其間的距離。

樣例輸入

368

10

樣例輸出

5 1

7 111 1

描述

現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。

如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0

正常思路:是素數輸出「素數 0」,不是加迴圈判斷,減迴圈判斷,比較大小輸出,特殊1時。

思路判斷素數:

/*判斷是否為素數

返回1則num是素數

返回0則num不是素數

*/int judge(int num)

} return 1;

}

如此執行:會報超時錯誤

優化演算法:

/*判斷是否為素數

返回1則num是素數

返回0則num不是素數

*/int judge(int num)

} return 1;

}

sqrt()功 能: 乙個非負實數的平方根

函式原型: 在vc6.0中的math.h標頭檔案的函式原型為double sqrt(double);

函式說明:sqrt系square root calculations(平方根計算),通過這種運算可以考驗cpu的浮點能力。

優化說明:

就比如要判斷17,k = sqrt(17) = 4.123;k的平方就是17,

設17能被a整除,b =17 / a 即 17 = b * a;

那麼說 17  的因子中(b或c)必定有乙個是小於等於 k = 4.123 (k開平方的數)

如果設 a < k ;b就一定大於k。迴圈判斷時候只需要讓17除以從2到k之間的數,減少運算次數,優化演算法

#include #include /*判斷是否為素數

返回1則num是素數

返回0則num不是素數

*/int judge(int num)

} return 1;

}/*返回減少幾個1為素數

*/int down(int num)

} return 0;

} /*返回加幾個1為素數

*/int up(int num)

} return 0;

} int main()else

if(judge(m))elseelse

} num_down=0;

num_up=0;

} return 0;

}

注:還有更優演算法,看見大神

題目人結果

語言耗時

記憶體大神

答案正確

c15ms

2092 kb

博主答案正確

c/c++

187ms

1156kb

希望收到有更優演算法

素數距離問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0 輸入第一行給出測試資料組數n 0輸...

素數距離問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0 輸入第一行給出測試資料組數n 0輸...

素數距離問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0 輸入第一行給出測試資料組數n 0 ...