CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

很老的问题了,求素数的问题。高手们请给个提示。谢谢!!!!!!!!!!!

楼主kdush(迷茫过后……还是迷茫……) (love—>kula始终未变)2003-12-02 23:41:33 在 C/C++ / C++ 语言 提问

求10的10次方内的素数。  
  小弟用的算法太屎了,10分钟才能算到20000000。  
  晕,我知道一定有好的算法的。  
  我是定义了一个long型数组来存储的,我知道用数组是很占内存的,而且100000000——10000000000是用求余数再除的方法,呵呵,是不是太笨了呀!  
  各位大虾,我是个大菜鸟,谢谢帮助! 问题点数:20、回复次数:6Top

1 楼hanyixin(怡)回复于 2003-12-03 08:58:34 得分 2

 
  筛子法呀,呵呵。  
  Top

2 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2003-12-03 09:07:59 得分 2

最快的办法就是预先建立一个素数表,然后到里面去查Top

3 楼guyu412(谷雨)回复于 2003-12-03 09:14:46 得分 2

不知道有什么好办法,你可以把最后一位是偶数的去掉。可以去掉一半,不知会不会快点。Top

4 楼klbt(快乐白兔)回复于 2003-12-03 09:18:25 得分 2

呵呵,你只需要建立一个小于100000的素数表,即可判断。Top

5 楼lhlemail(就随风)回复于 2003-12-03 09:46:43 得分 2

可以利用空间换时间,  
  建立两个动态数组一个用来存储素数,一个用来存储与每一个素数比较的比较数,  
  当比较数与对应的素数相等时,则将其置零重新累计。这样会缩短不少时间。  
  Top

6 楼byyyyy(苦行僧【苦】)回复于 2003-12-03 10:11:15 得分 10

除2这个特别的素数外,所有的素数都可以分成两类:第一类是被4除余1的素数,如5,13,17,29,37,41;第二类是被4除余3的素数,如3,7,11,19,23,31。第一类素数都能表示成两个整数的平方和(第二类则不能)。  
      例如:5=1*1+2*213=2*2+3*317=1*1+4*429=2*2+5*5这就是著名的费尔马“二平方”定理。有趣的是:上述等式右侧的数有的又恰恰是两个素数的平方,如13、29的表达式,叫作费尔马“二平方”素数,即如果一个素数能够表示成两个素数的平方和的形式:F=X*X+Y   *Y   (1)其中F、X、Y   都是素数,它就是费尔马“二平方”素数。  
   
  因此你可以现将偶数去掉,然后按照上面分成的这两类进行一下求解。  
   
  而且n无穷大时,高斯猜测,n以内的素数个数大约与n/lnn相当,或者说,当n很大时,两者数量级相同。这就是著名的素数定理。可以验证一下。  
   
  不知道我的理解对不对,欢迎讨论!Top

相关问题

  • 为什么n为素数时,n!+1一定是素数,请给出证明过程。thanks a lot
  • 请给点提示:
  • 给点提示把
  • 如何给提示
  • 求素数
  • 素数求解
  • 急!请给予提示!!
  • 请大家给点提示!!
  • 求素数问题
  • 什么是素数?

关键词

  • 素数
  • 数组
  • 去掉
  • 建立
  • 知道
  • 尔马

得分解答快速导航

  • 帖主:kdush
  • hanyixin
  • fireseed
  • guyu412
  • klbt
  • lhlemail
  • byyyyy

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo