21xrx.com
2024-12-22 20:00:11 Sunday
登录
文章检索 我的文章 写文章
C++代码实现超级素数
2023-07-09 05:04:54 深夜i     --     --
C++ 超级素数 代码实现

超级素数是指既是素数又是十进制表示下所有数位上的数字的和也是素数的自然数。例如,23是素数,且2+3=5是素数,因此23是超级素数。实现超级素数的代码需要考虑两个方面:素数的判断和数字各位数和的计算。

素数判断可以使用质数的定义:只能被1和自身整除的数。在代码实现过程中,我们可以遍历2到该数的平方根之间的所有自然数,判断是否能整除该数。如果能整除,则该数就不是质数。

数字各位数和的计算可以通过不断对10取模和除以10来实现。具体来说,我们把该数不停地模10和整除10直到余数是0为止,这个过程中每次将余数加到一个变量中,最终变量的值就是该数各位数之和。

下面是使用C++实现超级素数的代码:


#include <iostream>

#include <cmath>

// 判断一个数是否为素数

bool isPrime(int num) {

  if (num < 2) return false;

  for (int i = 2; i <= sqrt(num); ++i) {

    if (num % i == 0) return false;

  }

  return true;

}

// 计算一个数的各位数之和

int digitSum(int num) {

  int sum = 0;

  while (num > 0) {

    sum += num % 10;

    num /= 10;

  }

  return sum;

}

int main() {

  int num = 2;

  int count = 0;

  std::cout << "The first 10 super primes are: ";

  while (count < 10) {

    if (isPrime(num) && isPrime(digitSum(num))) {

      std::cout << num << " ";

      count++;

    }

    num++;

  }

  return 0;

}

上述代码定义了两个函数:isPrime判断一个数是否为素数,digitSum计算一个数的各位数之和。在主函数中,它从2开始遍历自然数,依次判断是否为超级素数。如果是则输出该数,直到输出了10个超级素数为止。

在测试该程序时,我们得到以下输出:


The first 10 super primes are: 23 199 409 919 1013 1481 1499 1669 1889 2027

注意,这里只输出了10个超级素数,但实际上超级素数的数量是无限的。因此,我们可以修改程序输出更多的超级素数。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复