BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #45571同步于 2010/11/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助]求第N个素数的值时N比较大则非法关闭问题。

horikita
2010/11/3镜像同步0 回复
#include<iostream> #include<fstream> #include<vector> using namespace std; class PrimArr { private: int * prim; int size; bool IsPrim(const int &, const int &); void Init(); public: PrimArr(int insize = 100) : size(insize) { prim = new int [size]; Init(); } ~ PrimArr() { delete prim; size = 0; } const int * arr(); }; bool PrimArr :: IsPrim(const int & e, const int & max) { for (int * p = prim; * p <= max; p ++) if (e % (* p) == 0) return 0; return 1; } void PrimArr :: Init() { if (size > 0) prim[0] = 2; else return ; int valid = 1; int dmax = 2; int dmaxco = 0; int dmaxdo = 5; for (int i = 3; valid < size; dmaxco ++, i ++) { if (IsPrim(i, dmax)) prim[valid ++] = i; if (dmaxco >= dmaxdo) { dmaxco = 0; dmaxdo = 2 * (++ dmax) + 1; } } } const int * PrimArr :: arr() { return (const int *)prim; } int main() { int dd = 130046; //当dd比130046大的时候则Windows报错关闭 PrimArr pa(dd); cout << pa.arr()[dd - 1] << endl; } 求助大牛解释原因。莫非内存不够?可是当时剩余内存还是有800M+呢。。 dd<=130046时,运算出来的结果是正确的。 环境:WinXP SP2, DevCPP。
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。