MATLAB求完全数、梅森数、质数、奇数、偶数、回文数、水仙花数、亲密数、合数的质因子分解

实验1 :奇数

奇数即按2分类出的两种类型数字中被2整除余1的数字,偶数即被2整除等于0的数字。
程序

num=input('请输入一个自然数:');
if mod(num,2)== 0
fprintf(' %d 是偶数。\n', num);
else
fprintf(' %d 是奇数。\n', num);
end

实验二:水仙花数

水仙花数是指一个 3 位数,它的每个位上的数字的立方和等于它本身(例如:13+53+3^3=153。我们写出如下程序判断某个数是不是水仙花数,同时举出反例验证程序的准确性。
程序

num=input('请输入一个三位自然数:');
bai = floor(num/100);         % 百位
shi = floor(mod(num,100)/10); % 十位
ge  = floor(mod(num,10)); 
a= bai.^3+shi.^3+ge.^3;
if num == a
fprintf(' %d 是水仙花数。\n', num);
else
fprintf(' %d 不是水仙花数。\n', num);
end

实验三:完全数

若一个自然数,它所有的真因子(即除了自身以外的约数)的和恰好等于它本身,这种数叫做完全数,又称完美数或完备数,是一些特殊的自然数:它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身.
研究完全数的意义:首先可以进深一步研究数学和运用数学理论;然后探索数学奥秘,找出相应规律,应用于社会实际;再者在研究完全数的过程中可以提出新的概念,为软件开发起到引导作用等等。基于以上意义写出两个程序,第一个是找出n以内的完全数,n可修改。第二个程序是为了得到一个数是否为完美数的结果。

程序1

num=input('请输入一个自然数:');
wq = [];
for i = 2:num
    sum = 0;
    k = 1;
    for j = 2: i / 2
        if mod(i,j) == 0
            sum = sum + j;
        end
    end
    if sum + 1 == i
        wq=[wq i];
    end
end
disp(['完全数有: ',num2str(wq)])

程序2

 num=input('请输入一个自然数:');
    sum = 0;
    k = 1;
    for i= 2: num / 2
        if mod(num,i) == 0
            sum = sum + i;
        end
    end
if sum + 1 == num
       fprintf(' %d 是完全数。\n',num);
else
       fprintf(' %d 不是完全数。\n', num);
end

实验四亲密数

如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。
根据问题描述,该问题可以转化为:给定整数A,判断A是否有亲密数。为解决该问题,首先定义变量a,并为其赋初值为某个整数。则按照亲密数定义,要判断a中存放的整数是否有亲密数,只要计算出该整数的全部因子的累加和,并将该累加和存放到另一个变量b中,此时b中存放的也是一个整数。再计算b中存放整数的全部因子的累加和,将该累加和存放到变量n中。最后若n等于a则可判定变量a和b中所存放的整数是亲密数。

程序

a=input('请输入一个自然数:');
b=0;i=1;n=0;
         while(i<a)  
         if mod(a,i)==0
         b=b+i;
         end
         i=i+1;
         end
         i=1;
while(i<b)
      if mod(b,i)==0  
      n=n+i;
      end
      i=i+1;
      end
      if n==a&a<b  
      fprintf("%d  %d为一对亲密数", a, b);
else
       fprintf(' %d 没有对应的亲密数。\n', a); 
      end

实验五 回文数

设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。根据实际情况,本次只考虑验证四位数的回文数,其余回文数皆可类似展开。*
程序

num=input('请输入一个四位自然数:');
qian= floor(num/1000);
bai=floor(mod(num/100,10));
shi=floor(mod(num/10,10));
ge=floor(mod(num,10));
if qian==ge&bai==shi
       fprintf(' %d 是回文数。\n',num);
else
       fprintf(' %d 不是回文数。\n', num);
end

实验六 对于求合数的质因子分解

程序

num=input('请输入一个自然数:');
i = 3;
fprintf('%d=', num);
while(mod(num,2) == 0)
fprintf(' %d', 2);
num=num/2;
         if (num==1)
         fprintf(' ');
         else
         fprintf('*');
         end
end
while(i <=num )
         if (mod(num,i)== 0)
         fprintf(' %d', i);
         num=num/i;	
         if (num==1)
         fprintf(' ');
         else
         fprintf('*');
         end
         else
         i=i+2;
         end
  end

实验七:素数判断n以内的素数,n可以修改。

程序

 y = [2];
for num= 3:2:100
    n = fix(sqrt(num))+1;
    for k = 2:n
        if mod(num ,k)==0
        break;
        end
    end
    if k==n
        y = cat(1 , y , num);
    end
end

实验八:梅森数

梅森数(Mersenne number)又称麦森数,是指形如2^p-1的正整数,其中指数p是素数,常记为Mp 。探寻梅森素数是发现已知最大素数的最有效的途程序径,自欧拉证明M31为当时最大的素数以来,在发现已知最大素数的世界性竞争中,梅森素数几乎囊括了全部冠军。梅森素数在实用领域也有用武之地。现在人们已经将大素数用于现代密码设计领域,其原理是:将一个很大的数分解成若干素数的乘积非常困难,但将几个素数相乘却相对容易得多。在这种密码设计中,需要使用较大的素数,素数越大,密码被破译的可能性就越小。 探寻梅森素数最新的意义是,它促进了分布式计算技术的发展。若其是素数,则称为梅森素数。在此我们对梅森数的基本性质进行判定,考虑现实因素并不进行过于繁重的运算,仅仅对p=19以内的梅森数进行判定。
程序

j=2;i=2;
while(i<20) 
m=2^i-1;
     while(j<=sqrt(m)) 
     if  mod(m,j)==0
     break;
     end
      j=j+1;
     end
if j>sqrt(m)
fprintf('P=%d时,2^P=%d是梅森数。\n',i,m);
end
i=i+1;
end

注意事项

如有错误,欢迎指出


版权声明:本文为weixin_50570276原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。