这是最传统的做法
function a=question(n)
a=[];
for i=2:n
k=0;
for j=2:i-1
if ~mod(i,j)
k=1;
break;
end
end
if ~k
a=[a,i];
end
end
这是另外一种做法
function a=question(n)
a=2:n;b=zeros(1,n-1);
for i=2:sqrt(n)
b(i(2:(n/i))-1)=i(2:(n/i));
end
a=a(~b);
楼上的做法也可以,只不过他利用了matlab自带的判断素数的函数isprime
A = primes(300); % 300以内所有素数
for i = 1:length(A),
a = floor(A(i)/100);
b = floor((A(i)-a100)/10);
c = A(i)-a100-b10;
Asum(i) = a+b+c;
end
% 判断各位之和是否为奇,结果:
A(find(mod(Asum, 2) == 1))
知道你意思了,这是函数文件,需要在command运行窗口输入,但文件名一定是函数名才可以,本文件名为:sushum
。command窗口输入过程如下:
n=7
sushu(n)
函数程序可运行,但结果错误,修改如下(有解释部分):
function [t]=sushu(n)
k=floor(sqrt(n));
for i=2:k
if mod(n,i)==0
t=0;
break;%表示当被i整出时,不是素数,终止循环
else
t=1;
end
end
a= input('请输入一个大于二的整数:');
p = true(a,1);
q = (1:1:a)'; p(1)=false;
for i = 2:1:sqrt(a)
if(p(i))
p(2i:i:end)=false;
end
end
disp(q(p))
方法一:
a(1)=input('请输入一个正整数:');
s=1;
while a(s)~=0;
s=s+1;
a(s)= input('请输入一个正整数:');
end;m=a(isprime(a)==1)
方法二:
clear;f=input('输入');i=1;
while f~=0
if isprime(f)
z(i)=f;
i=i+1;
end;
f=input('输入');
end;z
方法三:
y(1)=input('请输入第1个数:');
i=1;
while y(i)~=0
i=i+1;
y(i)=input(['请输入第',num2str(i),'个数:']);
end
disp('输入结束!敲任意键继续')
pause;
k=1;
for a=1:i
b=y(a);
if b==1;
d(k)=1;
k=k+1;
end
if b==2
d(k)=2;
k=k+1;
end
for c=2:(b-1)
if mod(b,c)==0;
break;
end;
e=c
end;
if e==(b-1);
d(k)=b;
k=k+1;
end
end
disp('素数为d:')
d
个人觉得第一种方法比较好!!!!!因为比较短!!!!呵呵
素数就是只能被1和本身整除的整数。j依次为100到1000之内的整数(每次循环+1),i为从2到j-1的依次+1的整数,判断j能否被i整除,若都不能则j即为素数,记下标志位flag,并将j计入数组prime中。输出prime
a=[1:10000];
b=a(isprime(a));
Q=sum(b); %Q= 5736396
例如:
要找素数
clear all;clc;
a=1:10000;
b=isprime(a);
a=ba;
a(a(1,:)==0)=[];
size(a)
ans =
1 1229
扩展资料:
1、如果 为合数,因为任何一个合数都可以分解为几个素数的积;而N和N+1的最大公约数是1,所以不可能被p1,p2,pn整除,所以该合数分解得到的素因数肯定不在假设的素数集合中。因此无论该数是素数还是合数,都意味着在假设的有限个素数之外还存在着其他素数。所以原先的假设不成立。也就是说,素数有无穷多个。
2、其他数学家给出了一些不同的证明。欧拉利用黎曼函数证明了全部素数的倒数之和是发散的,恩斯特·库默的证明更为简洁,哈里·弗斯滕伯格则用拓扑学加以证明。
-质数
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)