求用matlab写一个小程序~

用筛选法求某个范围内的所有素数。基本思想:求m以内的所有素数,先去除2的倍数(不包括2),再去除3的倍数(不包括3),。。。直到m,余下的就是结果。

% t4.m参考程序(考虑了多人最高、最低等情况):
% 请看懂!!!能编最好!

function t4()
clc
%---------start 初始化---------------
row=input('输入学生人数:');
col=input('输入课程数目:');
score=fix(rand(row,col)*49)+49;
xh0=1:row;
kch0=1:col;
for ii=1:row
zcj_pre(ii)=sum_(score(ii,:));
end
disp('原始成绩表:')
disp([xh0' score zcj_pre']);
%---------end 初始化--------------------
% 调用tongji1
[c_max,index_max,c_min,index_min,c_ave]=tongji1(score);
disp('平均分统计:')
fprintf(' 课程 平均\n');
% 按以上格式输出
disp([kch0',round(c_ave)']);
disp('课程最高分统计:')
fprintf(' 课程 最高 学号\n');
for jj=1:col
fprintf(' %d %d ',kch0(jj),c_max(jj))
for kk=1:length(index_max{jj})
fprintf('%d ',index_max{jj}(kk));
end
fprintf('\n');
end
disp('课程最低分统计:')
fprintf(' 课程 最低 学号\n');
% 按以上格式输出
for jj=1:col
fprintf(' %d %d ',kch0(jj),c_min(jj))
for kk=1:length(index_min{jj})
fprintf('%d ',index_min{jj}(kk));
end
fprintf('\n');
end

% 调用tongji23
[s_max,index_max,s_min,index_min,px]=tongji23(score);
disp('学生总成绩最高分统计:')
fprintf('最高总分 学号\n');
% 按以上格式输出
fprintf('%d ',s_max);
disp(index_max);

disp('学生总成绩最低分统计:')
fprintf('最低总分 学号\n');
% 按以上格式输出
fprintf('%d ',s_min);
disp(index_min);
disp('--------------------------------');
fprintf('总成绩排降序:\n');
fprintf('总成绩 学号\n');
% 按以上格式输出
disp(px);
% 存入zcj
zcj=px(:,1);%zcj在主函数空间
% 存入xh
xh=px(:,2);%xh也在主函数空间

function [c_max,index_max,c_min,index_min,c_ave]=tongji1(score)
% c_max课程最高分col*1向量
% index_max课程最高分对应学号col*1元胞
% c_min课程最低分col*1向量
% index_min课程最低分对应学号col*1元胞
% c_ave课程平均成绩col*1向量
[row,col]=size(score);
for jj=1:col
[c_max(jj),index_max{jj}]=max_(score(:,jj));
[c_min(jj),index_min{jj}]=min_(score(:,jj));
c_ave(jj)=ave_(score(:,jj));
end

function [s_max,index_max,s_min,index_min,px]=tongji23(score)
% s_max col门课程总成绩最高分
% index_max col门课程总成绩最高分对应学号
% s_min col门课程总成绩最低分
% index_min col门课程总成绩最低分对应学号
% px 排降序后的矩阵row*2 [col门课程总成绩 学号]
[row,col]=size(score);
for ii=1:row
zcj(ii)=sum_(score(ii,:));
end
[s_max,index_max]=max_(zcj);
[s_min,index_min]=min_(zcj);
px=sort_down(zcj);

function y=sum_(x)%自编求和函数,x为向量
y=0;
for ii=1:length(x)
y=y+x(ii);
end

function y=ave_(x)%自编求平均值函数,x为向量
y=sum_(x)/length(x);

function [x_max,index]=max_(x)%自定义函数
% x_max:向量x中的最大值
% index:向量x中的最大值对应的下标向量(有可能多个)
index=[];
x_max=x(1);
for ii=1:length(x)
if x(ii)>=x_max
x_max=x(ii);
end
end
for ii=1:length(x)
if x(ii)==x_max
index=[index,ii];
end
end

function [x_min,index]=min_(x)%自定义函数
% x_min:向量x中的最小值
% index:向量x中的最小值对应的下标向量(有可能多个)
index=[];
x_min=x(1);
for ii=1:length(x)
if x(ii)<=x_min
x_min=x(ii);
end
end
for ii=1:length(x)
if x(ii)==x_min
index=[index,ii];
end
end

function px=sort_down(x)
% px=[y_down index]
% y_down:x排降序
% index:x排序后的行标序列
[row,col]=size(x);
if row==1&&col~=1%保证x为列向量
x=x';
end
row=length(x);
index=1:row;
px=[x,index'];%构成排序前px
%采用选择排序2:
for ii=1:row-1
kk=ii;
for jj=ii+1:row
if px(jj,1)>px(kk,1)
kk=jj;
end
end
if kk~=ii
temp=px(kk,:);
px(kk,:)=px(ii,:);
px(ii,:)=temp;
end
end
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-03-04
m=100;%自己改
A=2:m;
P=[];
while ~isempty(A)
    P=[P,A(1)];
    A(mod(A,P(end))==0)=[];
end
P

第2个回答  推荐于2018-03-05
%%
clc;
clear;
m = linspace(1,100,100)
flag = 0;
res = 0;
for i = 3:length(m)
for j = 2:i-1
if mod(m(i),j) == 0
flag = 1;
break;
else
flag = 0;
end
end
if flag == 0
r = [res,m(i)];
res = r;
end
end
r(2:length(r))本回答被网友采纳
第3个回答  2018-03-03
%%
clc;
clear;
m = linspace(1,100,100)
flag = 0;
res = 0;
for i = 3:length(m)
for j = 2:i-1
if mod(m(i),j) == 0
flag = 1;
break;
else
flag = 0;
end
end
if flag == 0
r = [res,m(i)];
res = r;
end
end
r(2:length(r))