如何得到从 1 到 10的10次方 的所有素数?

aiyi 2001-05-13 07:40:00
如何得到从1到10的10次方的所有素数?
...全文
348 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
starfish 2001-05-17
  • 打赏
  • 举报
回复
所以我觉得应该循环每个数来找(当然可以利用数论知识不断将步长放大,因为素数的分布式越来越稀疏的),然后对于每个可能的都用Miller-Rabin随机素数测试算法测试(速度很快),一般通过测试的就肯定是素数的。
azzh 2001-05-17
  • 打赏
  • 举报
回复
在x<10^100以内,素数个数不服从x/lgx,因此已知素数可以储存。
duz 2001-05-16
  • 打赏
  • 举报
回复
简直开玩笑,10^10/10ln10=434M,如果用int64,每个整数8个字节,保存它们都已经要1G多内存了。计算10^10以内的所有素数最快应该是筛法,不过需要的空间为(比如每个整数分配一个字节(如果用比特位,计算速度就要慢好几倍),需要10^10=10G的内存,而现在的操作系统一般都不支持的。如果在计算以下时间的话,那就更加受不了了。
starfish 2001-05-16
  • 打赏
  • 举报
回复
To : NowCan(能量、激情、雨水、彩虹——雷雨云) 
你能够存储10^10的所有数么?
azzh 2001-05-16
  • 打赏
  • 举报
回复
我这儿有目前知道的全部素数,要吗?不过有40多M还是压缩的。
NowCan 2001-05-14
  • 打赏
  • 举报
回复
他要找所有素数,还是筛法快吧。
starfish 2001-05-14
  • 打赏
  • 举报
回复
普通的求法太慢了,应该用Miller-Rabin随机素数测试算法,这样效率高一点,只要控制一下概率因子(取s=50)即可保证出错概率在2^s以下。程序可以在http://algorithm.126.com/的资源中心 - 代码角 - 数论算法库函数 里面找到。
aiyi 2001-05-13
  • 打赏
  • 举报
回复
不知int64如何表示,自己派生吗?
hawkgao 2001-05-13
  • 打赏
  • 举报
回复
筛法,下面的改一改就可以了num是求1--(num-1)的素数
#include <stdio.h>

#define NUM 30001

void main(void)
{
long A[NUM+1],i,j,k,l;
for(i=1;i<=NUM;i++)
A[i]=i;
for(i=2;i<NUM;i++)
{
while(!A[i])
i++;
for(j=i,k=2;;k++)
{
l=j*k;
if(l>NUM)
break;
A[l]=0;
}
}
for(i=1;;i++)
{
while(!A[i])
i++;
if(i>NUM)
break;
printf("%d ",A[i]);
}
}
windindance 2001-05-13
  • 打赏
  • 举报
回复
求素数的算法是很简单的吧。
10的10次方用__int64类型。

33,026

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧