在C++中使用 AKS 素数测试计算双胞胎素数 我做错了什么?
Counting Twins-primes with AKS primality test in C++ What am I doing wrong?
晚安,我不是C++专家。我需要计算 3 以内的双素数数量和限制。我的输出总是给出 1。我做错了什么?这是我使用 AKS 的算法!
#include <bits/stdc++.h>
using namespace std;
long long c[100];
void coef(int n)
{
c[0] = 1;
for (int i = 0; i < n; c[0] = -c[0], i++) {
c[1 + i] = 1;
for (int j = i; j > 0; j--)
c[j] = c[j - 1] - c[j];
}
}
bool isPrime(int n)
{
coef(n);
c[0]++, c[n]--;
int i = n;
while (i-- && c[i] % n == 0)
;
return i < 0;
}
int main()
{
int limit=10000,counter=1,i;
for(i=3;i<=limit;i+=2){
if (isPrime(i)){
if(isPrime(i+2)){
counter++;
}
}
}
cout <<counter;
return 0;
}
我在 Windows 10 专业版上的代码块 17.02 上。我在做什么蠢事?
这根本不是用于素数的 AKS 算法。 它看起来像是RosettaCode任务的略微修改版本,它实现了指数时间引理。 它将比简单的试验除法慢,更不用说如果没有模块化算法,这种实现基本上是无用的,因为它甚至会在玩具尺寸的输入上溢出。
一旦你有一个适当的素数测试,要考虑的一件事就是不要一遍又一遍地在相同的输入上调用isprime((。 您可以为每个数字调用一次,只需记住您找到的最后一个素数。 如果 isprime(i( 为真,则计算您找到的最后一个是否是 i-2。 现在,您不需要重复调用,也不需要值数组。
更好的是,既然你想生成n的所有素数,就是使用筛子。 对于该任务,即使使用更好的素数测试,它比素数测试更有效。 您可以在 RosettaCode 页面上找到该任务的简单 C 版本。 那里有更好的,但考虑到你从什么开始,这并不重要。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- 首要问题的答案让值班员搞错了
- 看起来is_nothrow_constructible_v()在MSVC中被破坏了,我错了吗
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 我的C++线程做错了什么?
- 如何正确使用 >=?(a+f()+c)>=0 错了吗?
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- 没有输出的合并排序我做错了什么?
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 在C++中使用 AKS 素数测试计算双胞胎素数 我做错了什么?
- 指针相关的UE4崩溃.我的指针哪里错了?
- 我一直试图弄清楚我在这个链表程序中做错了什么
- 我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?
- FFMPEG,C++,内存泄漏,我做错了什么?
- 我做错了什么?反向字符串 C++
- 我在这个课上做错了什么?
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 在不使用内置库函数的情况下添加字符串,我做错了什么?
- 理解C++内存顺序,我错了吗?