有一个任务:
超数是一个数字,它是 [2…B] 范围内的两个素数之和。需要找到给定范围 [A…B] 中的所有超数。(2 <= A <= B <= 40000)
示例:输入:3 10;输出:4 5 6 7 8 9 10
我写了python代码:
a, b = map(int, input().split())
prime = [x for x in range(b + 1)]
prime[1] = 0
prime_list = []
i = 2
while i <= b:
if prime[i] != 0:
prime_list.append(prime[i])
for j in range(i, b - 1, i):
prime[j] = 0
i += 1
ans = []
for i in range(len(prime_list)):
for x in range(0, len(prime_list) - 1):
g = prime_list[i] + prime_list[x]
ans.append(g) if g <= b and g >= a else None
ans = sorted(list(set(ans)))
for x in ans:
print(x)
在 C++ 中
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main()
{
int a; int b;
cin >> a >> b;
vector<int> prime (0);
vector<int> prime_list (0);
for (int i = 0; i <= b; i++)
prime.push_back(i);
prime[0] = 1;
int i = 2;
while (i <= b)
{
if (prime[i] != 0)
{
prime_list.push_back(prime[i]);
for (int j = i; j < b - 1; j *= 2)
prime[j] = 0;
}
i += 1;
}
set<int> ans;
for (int i = 0; i < prime_list.size(); i++)
{
for (int x = 0; x < prime_list.size() - 1; x++)
{
int g = prime_list[i] + prime_list[x];
if (g <= b && g >= a)
ans.insert(g);
}
}
for (int x: ans)
cout << x << endl;
}
Python 通过了所有测试,但 C++“在执行过程中出错”。
你能告诉我C++代码有什么问题吗?(我不知道的测试数据)
你想短一点吗?
添加调试打印:
循环标题乱七八糟
for
。我们修复(这是一个最小的编辑,有更快的选项):好转了 上限错误是 Python 的遗留错误,循环步骤错误是重制。