首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“数字是素数吗?”

“数字是素数吗?”
EN

Code Review用户
提问于 2014-10-22 21:35:12
回答 1查看 2.2K关注 0票数 5

我想出了一种非常有效的方法来找出一个数字是否是素数,使用TI-BASIC与TI-83/84/+/SE计算器一起使用。我正试图优化它,无论如何可能。

代码语言:javascript
复制
:Input "NUMBER: ",A
:If A<2 or fPart(A
:Then
:Disp "INVALID INPUT"
:Stop
:End
:0→B
:2→I
:While I<A and not(B
:If 0=fPart(A/I
:1→B
:I+2→I
:If I=4
:3→I
:End
:If B
:Disp "NOT"
:Disp "PRIME"

几个注意事项:

  • 第2-6行用于验证输入,不影响程序的有效性。
  • 第4行和最后两行中的结束"s没有必要,但我添加了它们,这样语法就会在这里突出显示。
  • 第12-14行用于加倍加快循环速度,而不是每次由1递增,而是由2执行,If在第一次运行时将4偏移到3
  • not(B非常有效,每当找到匹配以将数字识别为复合数字时,就结束循环。
EN

回答 1

Code Review用户

回答已采纳

发布于 2014-10-23 06:13:00

我不讲TI-BASIC,所以我不能回顾风格、编码约定等等。但是有两种可能的优化:

  • 如果一个数字A是复合的,那么它必须有一个小于或等于sqrt(A)的因子。所以你可以用(我只是猜语法)::sqrt(A) -> S: I<=S和not(B )代替:I<=S和not(B ),如果输入是素数,那么审判庭的数量会大大减少。
  • 首先检查2的可分性,然后在奇数I = 3, 5, 7, ...上循环。这使您不必在每次循环迭代中检查:If I=4 :3->I。
票数 5
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/67607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档