社区

Java SE 帖子详情 问一个超级弱的问题,求素数中为什么要先开平方 ldhscxl 2009-03-21 05:50:47 这是算法上的问题,好好考虑一下算法,还要考虑一下素数的定义。

素数是只有1和本身能整除的整数。所以在求素数的时候,要将素数与1到素数本身中间的所有整数都相除,看是否有整除的数,如果有,那肯定不是素数了。但是从算法上考虑,为了减少重复量,开平方后面的数就不用相除了,因为a/b(平方数)=c(小一点的数),同样a/c=b。举例说明:

25,开平方以后是5,那么整除2~5就可以了,如果有满足条件的,就是素数。

看完之后还是晕,谁能解释的再清楚一些

...全文

1361 20 打赏 收藏 问一个超级弱的问题,求素数中为什么要先开平方 这是算法上的问题,好好考虑一下算法,还要考虑一下素数的定义。 素数是只有1和本身能整除的整数。所以在求素数的时候,要将素数与1到素数本身中间的所有整数都相除,看是否有整除的数,如果有,那肯定不是素数了。但是从算法上考虑,为了减少重复量,开平方后面的数就不用相除了,因为a/b(平方数)=c(小一点的数),同样a/c=b。举例说明: 25,开平方以后是5,那么整除2~5就可以了,如果有满足条件的,就是素数。 看完之后还是晕,谁能解释的再清楚一些 复制链接

扫一扫 分享 转发到动态 举报 AI 作业

写回复 配置赞助广告取 消

确 定

用AI写文章 20 条回复 切换为时间正序 请发表友善的回复… 发表回复 打赏红包 需支付: 0.00 元 取 消 确 定 ADemon_T 2009-03-23 打赏举报 回复 素数从2开始算的。。1不是素数。。。 wclszh 2009-03-23 打赏举报 回复 顶,学习 chumignze 2009-03-23 打赏举报 回复 节省运算效率 v先生在成都 2009-03-23 打赏举报 回复 这个问题不弱,谢谢 wangsuwen 2009-03-23 打赏举报 回复 学习了 Wbl314 2009-03-22 打赏举报 回复 目的 是为了减少循环次数,提高效率

原因: 一楼正解 jiest1986 2009-03-22 打赏举报 回复 请先学数学 tosshl 2009-03-22 打赏举报 回复 a=(a^1/2)*(a^1/2)

如果a不是素数

那么a有一个因子b a=b*c;

那么a的因子中(b或c)必定有一个是小于等于a^1/2的

所以判断的时候不用判断到1-a,只需要1-a^1/2 yang677888 2009-03-22 打赏举报 回复 这是输入一个数,判断有多少个素数

#include

using namespace std;

bool IsPrime( int n )

{

int bf = int( floor( sqrt(n) ) );

for( int i = 2; i <= bf; i++ )

{

if( n%i == 0 )

{

return false;

}

}

return true;

}

int main()

{

int n, amount;

amount = 0;

cout << "Please input a number:";

cin >> n;

unsigned int uiStart, uiStop;

uiStart = GetTickCount();

for( int i = 2; i < n; i++ )

{

if( IsPrime(i) )

{

amount++;

//cout << i << " ";

}

}

cout << endl << "There is/are " << amount

<< " Prime Numbers between 1 and " << n << endl;

return 0;

} yang677888 2009-03-22 打赏举报 回复 开方是为了减少除数的量,这样大大提高除数求余效率。开平方后面的数就不用相除了,因为开方得的数是除数最大因子了。 如81开方得9,9是除数最大因子,除数9后面的数就不用除了。

这是一个简单判断素数列子:(C语言主要代码)

bool IsPrime( int p )

{

for( int i = 2; i < p; i++ )

{

if( p%i == 0 )

return false;

}

return true;

}

要开方判断素数(C语言主要代码)

bool IsPrime( int p )

{

int bf = int( floor( sqrt( double(p) ) ) );

for( int i = 2; i <= bf; i++ )

{

if( p%i == 0 )

return false;

}

return true;

}

chjmars31728 2009-03-22 打赏举报 回复 同意一楼的说法 ZiSheng 2009-03-22 打赏举报 回复 确实很严禁 爱摸鱼de老邪 2009-03-22 打赏举报 回复 [Quote=引用 2 楼 banhcenzhaij 的回复:]

定义a=x*y (a,x,y都是正整数)

如果x和y都大于a的开平方

那么x*y>a,矛盾了.

所以必有一个数是小于等于a的开平方,如果这个数不等于1,那么a就是素数了.

[/Quote]

顶2楼,这个讲法很严谨很科学。 __浮夸 2009-03-22 打赏举报 回复 [Quote=引用 2 楼 banhcenzhaij 的回复:]

定义a=x*y (a,x,y都是正整数)

如果x和y都大于a的开平方

那么x*y>a,矛盾了.

所以必有一个数是小于等于a的开平方,如果这个数不等于1,那么a就是素数了.

[/Quote]

将的很仔细了 EvilCross 2009-03-22 打赏举报 回复 1楼说的很好, orangemike 2009-03-21 打赏举报 回复 利用数学概念降低搜索范围.

如果真的存在a*b = n,其中b大于n^(1/2)那么必然有a小于n^(1/2). cheng_fengming 2009-03-21 打赏举报 回复 同意一楼说的 其实求素数完全可以根据素数的定义来判断

但是为了提高效率 对其开平方就可以了! banhcenzhaij 2009-03-21 打赏举报 回复 定义a=x*y (a,x,y都是正整数)

如果x和y都大于a的开平方

那么x*y>a,矛盾了.

所以必有一个数是小于等于a的开平方,如果这个数不等于1,那么a就是素数了. ace62 2009-03-21 打赏举报 回复 比如,24的因数有1、2、3、4、6、8、12、24

按定义应该用2-23去除,但经过分析上面的数可以发现

1×24、2×12、3×8、4×6

如果2、3、4是某个数的因数,那么另外几个数也是,反之也一样

所以为提高效率,可以只检查小于该数平方根的那些数,如24的平方根大于4小于5,检查2-4就可

不知说清楚了没有,呵呵 yolov和deepsort的c语言实现_A c++ implementation of yolov5 and deep yolov和deepsort的c语言实现_A c++ implementation of yolov5 and deepsort.zip 2025年数据增强强度控制-基础卷(含答案及解析).docx 2025年数据增强强度控制-基础卷(含答案及解析).docx grpc-util-1.71.0.jar中文-英文对照文档.zip 1、压缩文件中包含:

中文-英文对照文档、jar包下载地址、Maven依赖、Gradle依赖、源代码下载地址。

2、使用方法:

解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。

3、特殊说明:

(1)本文档为人性化翻译,精心制作,请放心使用;

(2)只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等;

(3)不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。

4、温馨提示:

(1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地);

(2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件。

5、本文件关键字:

jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册。 2025年数据隐私保护匿名化技术-基础卷(含答案及解析).docx 2025年数据隐私保护匿名化技术-基础卷(含答案及解析).docx junit-platform-launcher-1.11.3.jar中文-英文对照文档.zip 1、压缩文件中包含:

中文-英文对照文档、jar包下载地址、Maven依赖、Gradle依赖、源代码下载地址。

2、使用方法:

解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。

3、特殊说明:

(1)本文档为人性化翻译,精心制作,请放心使用;

(2)只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等;

(3)不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。

4、温馨提示:

(1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地);

(2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件。

5、本文件关键字:

jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册。

Java SE

62,631

社区成员

307,264

社区内容

发帖 与我相关 我的任务 Java SE Java 2 Standard Edition 复制链接

扫一扫 分享 确定 社区描述 Java 2 Standard Edition 社区管理员

加入社区

获取链接或二维码

近7日

近30日

至今

加载中

查看更多榜单

社区公告

暂无公告 试试用AI创作助手写篇文章吧

+ 用AI写文章