求100以内素数的算法

bafhv04 2010-03-05 10:30:16

procedure TForm1.a;
var
X,Y : Integer;
i,j :Integer;
F : Boolean;
begin
mmo1.Lines.Clear;
x:=0;
Y:=100;
if (x=0) or (x=1) or (x<0) then
begin
X:=2
end;
for i:=X to Y do
begin
F:=True;
for j:=2 to Trunc(Sqrt(i)) do // Trunc(Sqrt(i)) 帮我解释下 为什么这里要平方根
begin
if (i mod j)=0 then
begin
F:=False;
Next;
end;
end;
if F then
begin
mmo1.Lines.Add(IntToStr(i));
end;
end;
end;
...全文
233 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 daoxwj 的回复:]
减少运算量而已
但是最好用古老的筛素数法
比这个要快指数倍
[/Quote]

?晕 上面引用错了
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yymt168 的回复:]
// Trunc(Sqrt(i)) 帮我解释下 为什么这里要平方根

减少运算量而已,
假设A=B*C(设B<C)
那么:
B<=Trunc(Sqrt(A)) 且 C>=Trunc(Sqrt(A))
[/Quote]

什么个方法啊
大拙男 2010-03-13
  • 打赏
  • 举报
回复
减少运算量而已
但是最好用古老的筛素数法
比这个要快指数倍
yymt168 2010-03-12
  • 打赏
  • 举报
回复
// Trunc(Sqrt(i)) 帮我解释下 为什么这里要平方根

减少运算量而已,
假设A=B*C(设B<C)
那么:
B<=Trunc(Sqrt(A)) 且 C>=Trunc(Sqrt(A))
jadeluo 2010-03-05
  • 打赏
  • 举报
回复
假设要判断的整数是n,它的平方根是m

很显而易见的是,当整数n能被比它的平方根m还大的另一个整数p整除时,整除所得到的商q肯定是小于它的平方根m的。

而在判断n是否是素数的循环值(即p值)是由小到大依次进行的,上面情况中的小于m的q值肯定在循环的初期已经判断过了,所以大于m的整数值的判断是多余的。
池龙 2010-03-05
  • 打赏
  • 举报
回复
举个很简单的例子你就明白了。

6

a. 6 / 1 = 6
b. 6 / 2 = 3
c. 6 / 3 = 2
d. 6 / 4 = 1.5
e. 6 / 5 = 1.2
f. 6 / 6 = 1

注意f项和a项,c项和b项事实上是等价的。
aaa2520 2010-03-05
  • 打赏
  • 举报
回复
肯定 没有 合适的了
aaa2520 2010-03-05
  • 打赏
  • 举报
回复
大于 平方根的 是 浪费,

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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