C++ 中 Pierpont 质数
本题中,我们给定了一个数 n。我们的任务是打印出所有小于 n 的皮尔庞特质数。
皮尔庞特质数是一种特殊类型的质数,形式为,
p= 2i . 3k + 1.
其中p是质数,i和k是某些整数。
我们举个例子来理解一下这个问题,
输入 − n = 50
输出 − 2, 3, 5, 7, 13, 17, 19, 37
要解决这个问题,我们必须找出所有符合条件的质数。为此,我们将找到一个因数是 2 和 3 的幂的数。找出所有质数。并且打印出两个数字,既是质数,又符合条件。
示例
一个程序来说明我们解决方案的实现,
#include <bits/stdc++.h> using namespace std; void printPierpontPrimes(int n){ bool arr[n+1]; memset(arr, false, sizeof arr); int two = 1, three = 1; while (two + 1 < n) { arr[two] = true; while (two * three + 1 < n) { arr[three] = true; arr[two * three] = true; three *= 3; } three = 1; two *= 2; } vector<int> primes; for (int i = 0; i < n; i++) if (arr[i]) primes.push_back(i + 1); memset(arr, false, sizeof arr); for (int p = 2; p * p < n; p++) { if (arr[p] == false) for (int i = p * 2; i< n; i += p) arr[i] = true; } for (int i = 0; i < primes.size(); i++) if (!arr[primes[i]]) cout<<primes[i]<<"\t"; } int main(){ int n = 50; cout<<"All Pierpont Prime Numbers less than "<<n<<" are :\n"; printPierpontPrimes(n); return 0; }
输出
All Pierpont Prime Numbers less than 50 are : 2 3 5 7 13 17 19 37
广告