我想获得第一百万个素数。
我知道寻找小素数的方法。我的问题是,如何将这么大的数字存储在简单的数据类型中,如long,int等?
答案 0 :(得分:4)
第百万个素数不到1600万,而今天计算机中的内存量是1600万个布尔值的普通C数组(每个可以使用1个字节)并不是那么大......
因此,分配您的大数组,用true填充它,将第一个元素视为表示整数2(即索引+ 2是表示的值),并实现标准筛的skip n / set false版本。计算真实情况,当你达到100万时,你可以停下来。
还有其他方法,但这有简单的优点。
答案 1 :(得分:1)
你可以分配一个1000000整数的数组 - 它只有4兆字节,按今天的标准来说是一个很小的数字。 Prime#1000000应该适合32位整数(素数#500000低于8000000,因此2000000000应该超过前1000000个素数的范围)。
您更有可能遇到时间问题,而不是计算空间。请记住,当你到达候选素数的平方根时,你可以停止测试候选除数,并且你可以使用你找到的候选除数的素数。