中易网

求教SAS利用数组算出1到10000的所有素数的程序

答案:1  悬赏:0  
解决时间 2021-01-13 20:48
  • 提问者网友:蓝琪梦莎
  • 2021-01-13 07:02
求教SAS利用数组算出1到10000的所有素数的程序
最佳答案
  • 二级知识专家网友:胯下狙击手
  • 2021-01-13 07:36
data tmp(drop=i);

n=2;
output;
do n=3 to 2000000 by 2;
do i=2 to ceil(sqrt(n));
if mod(n,i)=0 and i^=ceil(sqrt(n)) then leave;
if mod(n,i)^=0 and i=ceil(sqrt(n)) then output;
end;
end;
run;
上面这个对你那个稍微修改了下,速度快了不少,不过肯定还有更快的,
我见过一算法是这样,比如在判断10这个数是否是素数时,分别用10去除前面已判断出的2,3,5,7

而不是用10去除1-9,这样的算法大大提高了计算速度,可惜SAS水平有限追问首先谢谢您的程序。您说的第二种算法正是需要用到数组的方法,如果能提供出来我愿意追加20分悬赏。有些纠结到底要不要现在给你分数。。。追答呵呵,我回答你的问题不是为了悬赏分,
刚好这几天我也对用sas判断素数感兴趣,

data temp3(keep=i);
i=2; output; i=3;
array prime{1000000} a1-a1000000;
prime{1}=2;
num=1;
do while(i<=1000000);
j=1;
n=0;
do while (j<= num and n=0);
if (mod(i,prime{j})=0 and n=0) then n+1;
j+1;
end;
if n=0 then do ;
num=num+1;
prime{num}=i;
output;
end;
i=i+2;
end;
run;

和上次给你的对比,到了100万,你会看到数组并不占优,反而很最慢的,我sas水平太烂,或许还有很大的改进空间,我还搜集到一个别人更快的方法,可惜这里字数有限写不下追问谢谢,如果您能有其他方法我们可以私信联系。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息