MATLAB 欧拉计划1-20题

想学习一下matlab,看网上经验有说欧拉计划很好,于是注册之后,就开始答题了。有需求,学习才会有效率,争取每日一题,将自己的笔记整理成博客,一来与大家分享,二来也是记录自己的成长。自己写的代码感觉忒直接了,如果有其他方法思路欢迎留言。

  • 第1题:找出1000以下3或5的所有倍数的总和
    遍历小于1000的所有整数,判断能否被3或5整除。可以的话就m加上这个数即可。
m=0;
for i=1:999
    if mod(i,3)==0 || mod(i,5)==0
        m=m+i;
    end
end
disp(m)

% 输出结果:m=233168
  • 第2题:斐波那契数列中值不超过400万的项并找到偶数项的和
    首先,数列格式为a3=a1+a2,
    所以,在考虑a3不大于4000000的情况下,循环将a1,a2,a3重新赋值即可得到数列下一项的值,同时判断a3是否为偶数,满足条件就加在m上。
a=1;
b=2;
c=a+b;
m=2;
while c<=4000000
    a=b;
    b=c;
    c=a+b;
    if mod(c,2)==0
        m=m+c;
    end
end
disp(m)

% 输出结果:m=4613732
  • 第3题:计算600851475143因数中的的最大素数
    素数为大于1的自然数,所以循环中i从2开始(否则a输出为0)。
    首先,判断 i 是它的因数,用mod判断整除,满足条件后,直接用 isprime 函数判断是否为素数,最后,将素数 i 赋值输出即可。
m=600851475143;
a=0;
for i=2:(m-1)
    if mod(m,i)==0
        if isprime(i)
            a=i;
            continue
        else
            break
        end
    end
end
disp(a)

% 输出结果a=6857
  • 第4题 两个3位数字的乘积组成的最大回文数
A=zeros(999,999);
for i=100:999
    for j=100:999
        m=i*j;        
        m1=num2str(m);
        m2=str2double(fliplr(m1));
        if m==m2
            A(i,j)=m;
        end
    end
end
disp(max(max(A)))

% 输出为906609
  • 第5题 1到20的所有数的最小公倍数
a=0;
n=1;
while n
    n=n+1;
    if mod(n,11)==0 && mod(n,12)==0 && mod(n,13)==0 && mod(n,14)==0 && mod(n,15)==0 && mod(n,16)==0 && mod(n,17)==0 && mod(n,18)==0 && mod(n,19)==0 && mod(n,20)==0
        a=n;
        n=0;
    end
end
disp(a)

% 输出结果a=232792560

另外,matlab中 lcm(m,n) 函数可以求最小公倍数,下面代码虽然长了点,但是直接就求出来了哈哈哈

lcm(lcm(lcm(lcm(lcm(lcm(lcm(lcm(lcm(11,12),13),14),15),16),17),18),19),20)
  • 第6题 前一百个自然数的平方和与平方和之间的差
m=0;
n=0;
for i=1:100
    m=m+(i^2);
    n=n+i;
end
d=n^2-m;
disp(d)

% 输出结果 d=25164150
  • 第7题 第10001个素数
    判断是否为素数,isprime 真的太好用了哈哈哈哈
m=0;
n=1;
while n
    n=n+1;
    if isprime(n)
        m=m+1;
    end
    if m==10001
        break
    else
        continue
    end
end
disp(n)

% 输出结果n=104743
  • 第8题 1000位数中相邻13位数的最大乘积
    将1000位数以字符形式进行排列,依次读取其中的13字符并转化为数值形式,数组元素乘积函数 prod 直接求解
a=['73167176531330624919225119674426574742355349194934'...
'96983520312774506326239578318016984801869478851843'...
'85861560789112949495459501737958331952853208805511'...
'12540698747158523863050715693290963295227443043557'...
'66896648950445244523161731856403098711121722383113'...
'62229893423380308135336276614282806444486645238749'...
'30358907296290491560440772390713810515859307960866'...
'70172427121883998797908792274921901699720888093776'...
'65727333001053367881220235421809751254540594752243'...
'52584907711670556013604839586446706324415722155397'...
'53697817977846174064955149290862569321978468622482'...
'83972241375657056057490261407972968652414535100474'...
'82166370484403199890008895243450658541227588666881'...
'16427171479924442928230863465674813919123162824586'...
'17866458359124566529476545682848912883142607690042'...
'24219022671055626321111109370544217506941658960408'...
'07198403850962455444362981230987879927244284909188'...
'84580156166097919133875499200524063689912560717606'...
'05886116467109405077541002256983155200055935729725'...
'71636269561882670428252483600823257530420752963450'];
p=zeros(1,988);
for i=1:988
    m=(a(i:(i+12)));
    n=str2num(m(:));
    p(i)=prod(n);
end
format longG
max1=max(max(p))

% 输出结果 max1=23514624000
  • 第9题
    注释和注释上面 if 条件句是两种方法,第一种是我最开始自己写的,运行很久都没出来以为写错了,就百度到了注释的代码,运行成功后又改回以前的,三秒就出来了
for a=1:998
    for b=2:998
        c=1000-a-b;
        if a^2 + b^2==c^2
            q=a*b*c;
        end
%         for c=1:998
%             if a^2+b^2==c^2 && a+b+c==1000
%                 p=a*b*c;
%             end
%         end
    end
end
q
% p

% 输出结果 31875000
  • 第10题 200万以下的所有素数之和
m=0;
for i=2:(2000000-1)
    if isprime(i)
        m=m+i;
    end
end
format longG
m

% 输出结果 m=142913828922
  • 问题11 相同方向上四个相邻数字的最大乘积
    用到提取向量(矩阵)对角线函数 diag ,副对角线提取需要倒序,即 a(i:(i+3),j: -1 :(j-3)) 最后四个矩阵大小自己看看得了,懒得继续写一行代码了
a=[08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08;
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00;
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65;
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91;
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80;
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50;
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70;
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21;
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72;
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95;
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92;
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57;
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58;
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40;
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66;
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69;
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36;
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16;
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54;
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48];
A=zeros(20,17);
B=zeros(17,20);
%% 每一行r、列l四个数的乘积
for i=1:17
    for j=1:20
        r=a(j,i:(i+3));
        A(j,i)=prod(r);
        l=a(i:(i+3),j);
        B(i,j)=prod(l);
    end
end
%% 主对角线四个数
C=zeros(17,17);
for i=1:17
    for j=1:17
        m=a(i:(i+3),j:(j+3));
        C(i,j)=prod(diag(m));
    end
end
%% 副对角线
D=zeros(17,17);
for i=1:17
    for j=20:-1:4
        n=a(i:(i+3),j:-1:(j-3));
        D(i,j)=prod(diag(n));
    end
end
max_A=max(max(A));
max_B=max(max(B));
max_C=max(max(C));
max_D=max(max(D));

% 输出结果max_D=70600674
  • 问题12 第一个超过500个因数的三角形数
    循环界限不明确的,for 不能用,用while
i=1;
s=1;
while i
    i=i+1;
    s=s+i;
    a=1:s;
    n=length(a(mod(s,a)==0));
    if n>500
        i=0;
    end
end
s

% 输出结果s=76576500
  • 问题13 和的前十位数
    将数值转换成字符,就很好取其前十位了
a=[37107287533902102798797998220837590246510135740250;
46376937677490009712648124896970078050417018260538;
74324986199524741059474233309513058123726617309629;
91942213363574161572522430563301811072406154908250;
23067588207539346171171980310421047513778063246676;
89261670696623633820136378418383684178734361726757;
28112879812849979408065481931592621691275889832738;
44274228917432520321923589422876796487670272189318;
47451445736001306439091167216856844588711603153276;
70386486105843025439939619828917593665686757934951;
62176457141856560629502157223196586755079324193331;
64906352462741904929101432445813822663347944758178;
92575867718337217661963751590579239728245598838407;
58203565325359399008402633568948830189458628227828;
80181199384826282014278194139940567587151170094390;
35398664372827112653829987240784473053190104293586;
86515506006295864861532075273371959191420517255829;
71693888707715466499115593487603532921714970056938;
54370070576826684624621495650076471787294438377604;
53282654108756828443191190634694037855217779295145;
36123272525000296071075082563815656710885258350721;
45876576172410976447339110607218265236877223636045;
17423706905851860660448207621209813287860733969412;
81142660418086830619328460811191061556940512689692;
51934325451728388641918047049293215058642563049483;
62467221648435076201727918039944693004732956340691;
15732444386908125794514089057706229429197107928209;
55037687525678773091862540744969844508330393682126;
18336384825330154686196124348767681297534375946515;
80386287592878490201521685554828717201219257766954;
78182833757993103614740356856449095527097864797581;
16726320100436897842553539920931837441497806860984;
48403098129077791799088218795327364475675590848030;
87086987551392711854517078544161852424320693150332;
59959406895756536782107074926966537676326235447210;
69793950679652694742597709739166693763042633987085;
41052684708299085211399427365734116182760315001271;
65378607361501080857009149939512557028198746004375;
35829035317434717326932123578154982629742552737307;
94953759765105305946966067683156574377167401875275;
88902802571733229619176668713819931811048770190271;
25267680276078003013678680992525463401061632866526;
36270218540497705585629946580636237993140746255962;
24074486908231174977792365466257246923322810917141;
91430288197103288597806669760892938638285025333403;
34413065578016127815921815005561868836468420090470;
23053081172816430487623791969842487255036638784583;
11487696932154902810424020138335124462181441773470;
63783299490636259666498587618221225225512486764533;
67720186971698544312419572409913959008952310058822;
95548255300263520781532296796249481641953868218774;
76085327132285723110424803456124867697064507995236;
37774242535411291684276865538926205024910326572967;
23701913275725675285653248258265463092207058596522;
29798860272258331913126375147341994889534765745501;
18495701454879288984856827726077713721403798879715;
38298203783031473527721580348144513491373226651381;
34829543829199918180278916522431027392251122869539;
40957953066405232632538044100059654939159879593635;
29746152185502371307642255121183693803580388584903;
41698116222072977186158236678424689157993532961922;
62467957194401269043877107275048102390895523597457;
23189706772547915061505504953922979530901129967519;
86188088225875314529584099251203829009407770775672;
11306739708304724483816533873502340845647058077308;
82959174767140363198008187129011875491310547126581;
97623331044818386269515456334926366572897563400500;
42846280183517070527831839425882145521227251250327;
55121603546981200581762165212827652751691296897789;
32238195734329339946437501907836945765883352399886;
75506164965184775180738168837861091527357929701337;
62177842752192623401942399639168044983993173312731;
32924185707147349566916674687634660915035914677504;
99518671430235219628894890102423325116913619626622;
73267460800591547471830798392868535206946944540724;
76841822524674417161514036427982273348055556214818;
97142617910342598647204516893989422179826088076852;
87783646182799346313767754307809363333018982642090;
10848802521674670883215120185883543223812876952786;
71329612474782464538636993009049310363619763878039;
62184073572399794223406235393808339651327408011116;
66627891981488087797941876876144230030984490851411;
60661826293682836764744779239180335110989069790714;
85786944089552990653640447425576083659976645795096;
66024396409905389607120198219976047599490197230297;
64913982680032973156037120041377903785566085089252;
16730939319872750275468906903707539413042652315011;
94809377245048795150954100921645863754710598436791;
78639167021187492431995700641917969777599028300699;
15368713711936614952811305876380278410754449733078;
40789923115535562561142322423255033685442488917353;
44889911501440648020369068063960672322193204149535;
41503128880339536053299340368006977710650566631954;
81234880673210146739058568557934581403627822703280;
82616570773948327592232845941706525094512325230608;
22918802058777319719839450180888072429661980811197;
77158542502016545090413245809786882778948721859617;
72107838435069186155435662884062257473692284509516;
20849603980134001723930671666823555245252804609722;
53503534226472524250874054075591789781264330331690];
s=0;
for i=1:100
    s=s+a(i);
end
s1=num2str(s)
s2=str2num(s1(1:10))

% 输出结果 s2=5537376230
  • 问题14 小于100万的最长链条的最小起始数字
A=zeros(1,(1000000-1));
for i=1:(1000000-1)
    m=1;
    if mod(i,2)==0
        n=i/2;
        m=m+1;
    else
        n=i*3+1;
        m=m+1;
    end
    while n~=1
        if mod(n,2)==0
            n=n/2;
        else
            n=n*3+1;
        end
        m=m+1;
    end
    A(i)=m;
end
[x,y]=max(A)

% 输出结果y=837799(此时i值x=525)
  • 问题15 寻找路径条数
    参考Ten years old,在40条路(方格边缘)中,只需要确定向右或者向下的20条路的情况即可,数学方法就是,C(下标为40,上标为20)
    另一种 杨辉三角 方法,可参考凤羽MATLAB
format longG
nchoosek(40,20)
a=char(sym(2^1000))
m=0;
for i=1:length(a)
    m=m+str2num(a(i));
end
m

% 输出结果m=1366
  • 问题17
    参考的网上的,比较有规律,计算的时候需要剔除空格和连字符
  • 问题18
    有好的方法可以交流一下,我想不到了
  • 问题19
    看不明白题意
  • 问题20
    正确答案是648,不知道错在哪里
n=0;
p=char(sym(factorial(100)))
for i=1:length(p)
    n=n+str2num(p(i));
end
n
% 输出结果n=683
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
欧拉伯努利试是一类经典的流体力学目,常用于讨论在流体中的连续性、动量守恒和能量守恒等方面的问。使用MATLAB可以方便地求解这类问。 要解决欧拉伯努利试,我们需要使用流体力学的基本原理,即连续性方程、动量守恒和能量守恒方程。我们可以利用MATLAB编写程序,将这些方程转化为数学模型,并求解相关的物理量。 对于欧拉伯努利试,我们常常需要求解的物理量包括流速、压力和液体高度等。在MATLAB中,我们可以利用流体力学的基本原理建立方程组,并使用数值求解方法计算出相关的物理量。 以一个简单的欧拉伯努利试为例,假设流体在一段管道中流动,已知管道的截面积、液体的初始速度和液体的高度等参数。我们可以利用连续性方程、动量守恒和能量守恒方程,通过MATLAB编写程序求解出管道中的流速、压力和液体的高度等参数。 在MATLAB中,我们可以使用数值求解方法(如Euler法、Runge-Kutta法)对欧拉伯努利试进行数值求解。同时,我们还可以利用MATLAB的可视化功能,将求解结果绘制成图形,更直观地展示出物理量的变化规律。 综上所述,欧拉伯努利试是一个典型的流体力学问,在MATLAB中可以方便地使用数值求解方法求解相关的物理量,并利用可视化功能展示求解结果。通过MATLAB的应用,我们可以更深入地理解流体力学的基本原理,同时也可以更直观地展示和分析物理量的变化情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值