索菲热尔曼素数


素数是指大于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.