我正在做一个个人项目,在这个项目中我需要确定 0 到 999 之间的所有素数。因为我不是特别擅长数学,所以我厌倦了下面这种笨拙的蛮力方法。
bool constexpr is_prime(int imp)
{
return imp == 1 ? false : (imp % imp == 0 && imp % 1 == 0 && [&imp]{ for(int i = 2; i < imp; ++i) if(imp % i == 0) return false; return true;}());
}
bool is_prime_power(int imp)
{
for(int i = 1; i < 1000; ++i)
if (is_prime(i))
for (int j = 0; j < 100; ++j)
if (imp == pow(i, j))
return true;
return false;
}
对于 0...30,输出应该是(根据A000961):
1 2 3 4 5 7 8 9 11 13 16 17 19
但是,这是我得到的:
1 2 3 4 5 7 8 9 11 16 19
13和17消失到哪里去了?
由于我的方法找不到任何逻辑问题,因此我实现了自己的 pow() 函数。
double constexpr _pow(double base, double exp)
{
return exp == 0 ? 1 : base*pow(base, exp - 1);
}
现在,如果我从 math.h 调用我的 _pow() 而不是 pow() 版本,则输出显示为异常。我的实施错了吗?如果没有,来自 math.h 的 pow() 将无法正常工作。知道是什么原因造成的吗?