索菲熱爾曼素數
素數是指大於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語言程式設計程式碼。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP