【发布时间】:2014-06-02 09:26:44
【问题描述】:
我试图找到介于 1,000,000,000,000 和 1,000,000,100,000 之间的素数。如果位数是 4 到 8,我的代码是可以的,但是如果位数大于或等于 12,我会得到:
- 警告:整数常量对于“long”类型来说太大
- 浮点异常
#include <iostream>
#define num 1000000100000
using namespace std;
int main()
{
bool prime;
long double sum = 0;
for (long long int i=1000000000000; i<=num; i++)
{
prime = true;
for(int j=2; j<=i/2; j++)
{
if(i%j == 0) prime = false;
}
if(prime) sum+=i;
}
cout<<sum<<endl;
}
【问题讨论】:
-
将
long long int i=1000000000000替换为long long int i=1000000000000LL,将#define num 1000000100000替换为#define num 1000000100000LL,将for(int j=2; j<=i/2; j++)替换为for(long long int j=2; j<=i/2; j++) -
...除非您有充分的理由,否则它们也应该是未签名的。
-
只是出于好奇,运行这个循环需要多长时间?
-
@40two 应该是关于 pow(10,17) 操作的。超过 3.17 年是我的粗略猜测。
-
@WhozCraig 他这样做有充分的理由:它们是数值。