索菲熱爾曼素數


素數是指大於1的數,它只有兩個因數:自身和1。這意味著除了1和自身之外,沒有任何其他數可以整除這些數而不留下餘數。例如,前十個素數是2、3、5、7、11、13、17、19、23和29。如果我們取數2,其因數是2和1,即自身和1。同樣,如果我們取11,其因數是11和1,即自身和1。現在我們已經清楚地瞭解了什麼是素數,是時候轉向我們的主題——索菲熱爾曼素數了。

那麼,索菲熱爾曼素數究竟是什麼呢?

在數論(研究整數和算術函式的學科)中,如果2p + 1也是素數,則素數p被稱為索菲熱爾曼素數。

2、3、5、11、23、29、41、53、83、89、113、131、173、179、191、233、239、251、281、293、359等等。這些是最初的一些索菲熱爾曼素數。

問題陳述

編寫一個程式來列印索菲熱爾曼素數。

方法

我們首先取一個數,並檢查它是否是素數。即該數的因數是否只有1和它自身。如果它是素數,我們繼續下一步。也就是說,我們將該數乘以2,再加1。將得到的結果取出來,我們檢查結果是否為素數。如果這兩個條件都成立,並且在這兩種情況下獲得的數都是素數,則該數為索菲熱爾曼素數。

示例1

設p=2,它是一個素數,而2p+1 = (2*2) + 1 = 5。由於2和5都是素數,因此2被稱為索菲熱爾曼素數。

示例2

同樣,設p=3,它是一個素數,而2p+1 = (2*3) + 1 = 7。由於3和7都是素數,因此3被稱為索菲熱爾曼素數。

示例3

讓我們再舉一個例子;設p=7,它是一個素數,而2p+1 = (2*7) + 1 = 15。由於15不是素數,因此7不是索菲熱爾曼素數。

列印索菲熱爾曼素數的C程式。

示例

#include<stdio.h>
#include <stdbool.h>
#include <string.h>
// function to detect prime number sieve method is used to check whether the number is prime or not.
bool sieve(int n, bool primeNum[]) {
   for (int p = 2; p * p <= n; p++) {
       // If prime[p] is not changed, then it is a prime
   if (primeNum[p] == true) {
      // Update all multiples of p
      for (int i = p * 2; i <= n; i += p)
      primeNum[i] = false;
    }
  }
}
void SophieGermainPrime(int n) {
   bool primeNum[2 * n + 1];
   memset(primeNum, true, sizeof(primeNum));
   sieve(2 * n + 1, primeNum);
   for (int i = 2; i <= n; ++i) {
      // checking each i if it is Sophie germain prime or not.
      if (primeNum[i] && primeNum[2 * i + 1])
      printf("%d ",i);
    }
}
int main() {
   int n = 50;
   printf("Sophie Germain Primes below 50: ");
   SophieGermainPrime(n);
   return 0;
}

輸出

執行後,它將產生以下輸出

Sophie Germain Primes below 50: 2 3 5 11 23 29 41

結論

同樣,我們可以透過輸入值來確定給定數字是否為索菲熱爾曼素數。本文解決了確定給定數字是否為索菲熱爾曼素數的挑戰。這裡提供了相同的C語言程式設計程式碼。

更新於:2023年8月23日

瀏覽量:162

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.