C++ 索菲·热末质数

C++ 索菲·热末质数

质数是大于1的数字,它们只有两个因数:数字本身和因数1。这意味着除了1和数字本身以外,没有任何数字可以被这些数字整除而不留下余数。例如,前十个质数是2、3、5、7、11、13、17、19、23和29。如果我们取数字2,因数就是2和1。也就是数字本身和因数1。同样,如果我们取数字11,因数就是11和1。也就是数字本身和因数1。现在我们已经清楚了什么是质数,是时候进入我们的主题了,即索菲·热末质数。

那么什么是索菲·热末质数呢?

在数论中,如果一个质数p满足2p+1也是一个质数,那么它被称为索菲·热末质数。数论是研究整数和算术函数的学科。

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。由于2和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

结论

同样地,我们可以通过输入值来确定给定的数字是不是一个Sophie Germain质数。本文解决了确定给定的数字是否为Sophie Germain质数的挑战。下面提供了相应的C编程代码。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程