王道機試練習 求素數

2021-10-04 16:11:42 字數 784 閱讀 7336

題目描述: 給定乙個數 n,要求判斷其是否為素數( 0,1,負數都是非素數)。

輸入: 測試資料有多組,每組輸入乙個數 n。

輸出: 對於每組輸入 ,若是素數則輸出 yes,否則輸入 no。

樣例輸入:

13樣例輸出:

yes怎樣確定乙個數是素數?我們可以用所有大於 1 小於其本身的整數去試著 整除該數,若在該區間內存在某個數能整除該數則該數不是素數;若這些數都不 能整除它,則該數為素數。這一樸素的演算法思想時間複雜度為 o(n),n 為我們 要測試的數字。但其實,我們並不用測試到 n-1 為止,我們只需測試到不比 sqrt

(( n) 對 n 開根號)大的整數即可,若到這個整數為止,所有正整數數均不能整 除 n,則可以斷定, n 為素數。若 n 不存在大於 sqrt(n)的因數時,該做法顯然 正確。若我們假設 n 存在大於等於 sqrt(n)的因數 y,則 z = n / y 必同時為 n 的 因數,且其值小於等於 sqrt(n)(否則 z * y > n )。所以,若 n 存在相異於 1 與其 本身的因數且該因數大於 sqrt(n),則必存在小於或等於 sqrt(n)的因數,所以 我們只需測試到 sqrt(n)為止。這樣測試乙個數是否是素數的複雜度就降低到了 o(sqrt(n))。

#include

#include

using

namespace std;

bool

judge

(int x)

return

true;}

intmain()

}

王道機試練習 分解素因數

求正整數 n n 1 的質因數的個數。相同的質因數需要重複計算。如 120 22235 共有 5 個質因數。輸入 可能有多組測試資料,每組測試資料的輸入是乙個正整數 n,1該 按照如下步驟對輸入的整數分解素因數 1.利用素數篩法篩得 0 到 100000 區間內所有素數。2.輸入 n。3.依次測試步...

王道機試練習 求最短距離Dijkstra演算法

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的 t shirt。但是 每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累 的 所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?輸入 輸入包括多組資料。每組資料第一行是兩個整數 n m n 100,m 10000 ...

王道機試練習 找朋友之求最大集合

有 10000000 個小朋友,他們之中有 n 對好朋友,且朋友關係具 有傳遞性 若 a 與 b 是朋友,b 與 c 是朋友,那麼我們也認為 a 與 c 是朋友。在給出這 n 對朋友關係後,要求我們找出乙個最大 人數最多 的集合,該集 合中任意兩人之間都是朋友或者該集合中只有乙個人,輸出該最大人數。...