時間限制: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 ...