你如何從 C 隨機生成素數?

發布 科學 2024-03-21
5個回答
  1. 匿名使用者2024-01-26

    簡單地說,使用 srand(unsigned int

    該函式設定種子,然後使用 rand() 返回乙個隨機數。 c C++ 中的隨機數不是真隨機數,而是偽隨機數。

    要生成乙個隨機數,你需要乙個隨機數種子,即呼叫srand(long)來初始化這個種子,作為隨機數種子,最好每次都有不同的值,這樣每次執行生成的隨機數都不一樣,所以時間是最好的選擇,因為它總是在變化。 函式 time(unsigned int) 返回從過去時間(我不記得是哪一年、哪月、哪一天和什麼時候)到當前時間的差值(以秒為單位)

    主要通過: srand((unsigned int) time(null)); 隨時間播種,每次生成不同的隨機數。

    printf("%d", rand())

    這兩句話實現了。

    以下是您可能需要的內容**::

    include 隨機輸出乙個不大於 100 的質數。

    #include

    #include

    #include

    int prime(int n)

    int i,flag = 1;

    if(n < 2) flag = 0;

    for(i = 2; i * i <= n &&flag;+一世)確定它是否為質數。

    flag = n % i;

    return n;

    int getprime()

    int n,k;

    srand(time(null));

    n=rand()%100;生成乙個介於 0-99 之間的隨機數。

    k=prime(n);

    return k;

    int main()

    printf("%d",getprime())

  2. 匿名使用者2024-01-25

    沒有直接生成的函式,只能隨機化乙個數,然後判斷它是否是素數,是輸出,不是丟棄,一直到生成素數為止。

  3. 匿名使用者2024-01-24

    if((n%i==0) &n > 2)) 1 不是素數,所以 n 必須大於 2

    i = 1;如果繼續,下乙個迴圈首先是 i++,然後 i < n 不是從頭開始執行的,所以設定 1 以便迴圈從 2 開始。

    n=rand()%100 ;

    continue;

  4. 匿名使用者2024-01-23

    Rabin-Miller 演算法是驗證數字是否為素數的典型方法。 判斷素數的方法是拉賓-公尺勒概率檢驗,那麼他的具體過程是什麼呢? 假設我們要確定 n 是否是素數,首先我們必須確保 n 是奇數,然後我們可以將 n 表示為 n = (2 r)*s+1,請注意 s 也必須是奇數。

    然後我們必須選擇乙個隨機整數 a (1<=a<=n-1),然後我們必須確定乙個 s=1 (mod n) 或 a ((2 j)*s) = -1 (mod n) (0<=j如果任何公式為真,我們說 n 通過了測試,但也有可能不是質數可以通過測試。 因此,我們通常會多次這樣做,以確保我們得到的是乙個質數。 (DDS 的標準是 50 次測試)。

    Rabin-Miller 演算法用於檢查。

    首先,選擇乙個隨機數 p 進行代理測試,並計算 b,其中 b 是 2 可被 p-1 整除的次數。 然後計算 m,使得 n = 1 + (2 b)m。

    1) 選擇乙個小於 p 的隨機數 a。

    2) 設 j=0 和 z=a m mod p

    3) 如果 z=1 或 z=p-1,則 p 通過測試並可能成為質數。

    4) 如果 j>0 和 z=1,則 p 不是素數。

    5) 設 j=j+1。如果 j 和 z <> p-1,則設 z=z 2 mod p,然後返回 (4)。 如果 z=p-1,則 p 通過測試,可能是素數。

    6) 如果 j=b 且 z<>p-1,則它不是素數。

    #include

    #include

    #include

    隨機數生成器。

    在 m n 之間生成乙個隨機數。

    unsigned long random(unsigned long m,unsigned long n)

    模功率功能。 返回 x ymodn

    long powmod(long x,long y,long n)

    return s;

    Rabin-Miller 素數檢驗,檢驗返回 1,否則返回 0。

    n 是要測量的質數。

    注意:通過測試不一定是質數,非質數通過測試的概率是 1 4

    int rabinmillerknl(unsigned long n)

    隨機取乙個 b,2<=b>p;

    for(int temp=0;temp<5;temp++)

    elsebreak;

    if(count==5)

    cout<<"一共通過了5項測試,這是乙個質數! "cout<<"非素數"

  5. 匿名使用者2024-01-22

    int main(void)

    elseif (a == 1)

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

    if (0 == a%i)

    break;

    if (a == i)

    printf("%d 是質數", a);

    elseprintf("%d 是合數", a);

    return 0;

    該計畫的主要思想:

    隨機想出乙個數字,然後定義乙個變數。 首先確定隨機數是否能被 2,3,5 整除,如果是,則直接輸出,然後退出程式。 如果沒有,請將其設為 2(因為 0 不是除數,任何整數都可以被 1 整除),然後讓它相加,直到它與輸入的數字相同。

    如果使用者在自加過程中輸入的數字可以被這個數字整除,則自加法(退出迴圈)將結束,然後自加法加法所加的數字與輸入的數字相等,如果相等,則表示該數字之前的所有數字都是不可整除的,即 質數。如果不相等,則表示該數具有 2 個以上的因數,並且是合數。

    另外:素數和素數是相同的含義。

相關回答
14個回答2024-03-21

#include ""

#include "" >>>More

10個回答2024-03-21

rnd*(上限,下限+1)+下限,如果要求生成的隨機數包含上限(本題中為100),則為正確。 >>>More

9個回答2024-03-21

工具材料:以 Microsoft Visual Studio 2010 為例。 >>>More

8個回答2024-03-21

如果你不重複,我會給你乙個更經典的**。

int a[35]; >>>More

8個回答2024-03-21

為最初給定的種子生成相同的序列,因為每次呼叫 rnd 函式都使用序列中的前乙個數字作為下乙個數字的種子。 >>>More