matlab 欧拉计划 1-7题

1.如果我们列出所有低于10的自然数是3或5的倍数,我们得到3,5,6和9,这些倍数的总和为23。找到1000以下所有3或5的倍数的总和。

答案:233168.

clc,clear
N = 1000;
A = 3:3:N-1;
B = 5:5:N-1;
C = union(A, B);   %取并集
result = sum(C)

参考网址:https://www.ilovematlab.cn/thread-222867-1-293.html

2. 斐波那契数列中的每个新项都是通过添加前两个项生成的。从1和2开始,前10项将是:1、2、3、5、8、13、21、34、55、89、……通过考虑斐波那契数列中值不超过四百万的项,找出偶数项的和。

答案: 4613732

clc,clear
a=1;
b=2;
ans=2;
while b<4000000
      c=a+b;
      tmp=c;
      a=b;
      b=tmp;
   if rem(b,2)==0
      ans=ans+b;
    end
end
ans

3. 13195的质因数是5、7、13和29。数字600851475143的最大质因数是什么?

答案:6857

clc,clear
num=600851475143;
newnum=num;        %需要将这个数值赋给变量方便后面使用
facter=2;  %最小质数为2
largestFact=0;
while facter*facter<newnum     %极端情况
         if  rem(newnum,facter)==0
            newnum=newnum/facter;      %将newnum更新
            largestFact=facter;
       else
            facter=facter+1;
end
end
if newnum>facter
largestFact=newnum;
end
largestFact

转载链接:https://blog.csdn.net/ttvipandc

4. 回文数字的两种读法是相同的。由两个2位数字相乘得到的最大回文是9009 = 91×99。找出由两个3位数的乘积构成的最大回文。

答案: 906609
993*913

out=[];
for a=100:999
for b=100:a      %b从100到a变化,使得b<=a,从而避免a和b互换的重复
    c=a*b;
    d=num2str(c);
    if isequal(d,d(end:-1:1))
        out=[out;[a b c]];      %out是个nx3的矩阵,其中第一列,第二列表示两个乘数,而第三列就是乘积
    end
end
end
max(out)

转载链接:https://zhidao.baidu.com/question/1988383871520677987.html

python3:

max = 0
for i in range(100,1000):
    for j in range(100,1000):
        palindrome = i*j
        num = str(palindrome)[::-1]      #把这个数当字符串反转后相等就是回文
        if (num == str(palindrome)):
            print("回文数",palindrome)
            if palindrome>max:
                max = palindrome;
print("最大是",max)

转载链接:https://www.jianshu.com/p/dae9c0648110

5.2520是可以除以1到10中的每个数字而没有任何余数的最小数字。可以被1到20的所有数字整除的最小正数是多少?

答案:232792560

tic;
disp(prod([2,3,4,5,6,7,11,13,17,19]));
toc;

%%分析:
第一步是分离数表,将质数和非质数分离,质数不超过lgn个,所以可以在O(lgn)时间内解决
第二步是从质数表中,进行叠乘运算,找出所能叠到的最大值。这么做的原因是,质数代表了所有的公因子,而公倍数包含公因子的乘方,这个循环也可以在O(lgn)的时间上限完成。
下面是手算演示:
1-10的素数表: 2,3,5,7
叠乘:2*2*2=8,到达临界条件,取得4,
3*3=9,到达临界条件,取得3
最终叠乘:2*3*5*7*3*4=2520
----------------------------------------------------------------
1-20的素数表:2,3,5,7,11,13,17,19
( 在2520基础上,乘上11-20的质数,有11,13,17,19.因为这儿还有个16,而2520只够 除8,所以再乘以2.)
2,3,4,5,6,7,11,13,17,19
最终叠乘:2520*11*13*17*19*2=232792560

6.前十个自然数的平方和是, 1 2 + 2 2 + . . . + 1 0 2 = 385 1^2 + 2^ 2 + ... + 10^2 = 385 12+22+...+102=385 前十个自然数之和的平方是, ( 1 + 2 + . . . + 10 ) 2 = 5 5 2 = 3025 (1 + 2 + ... + 10)^2 = 55^2 = 3025 1+2+...+102=552=3025 因此,前十个自然数的平方和与总和的平方之差为3025-385 = 2640。 找出前100个自然数的平方和与总和的平方之间的差异。

clc,clear
sum1=0;
m=0;
sum2=0;
for i=1:100
    sum1=sum1+i^2;
end
for j=1:100
    m=m+j;
    sum2=m^2;
end
sum2-sum1

7.通过列出前六个素数:2,3,5,7,11和13,我们可以看到第6个素数是13。第10 001个素数是多少?

答案:104743

clc,clear
i=0;
k=0;
while k<10001
     i=i+1;  
     while isprime(i)
              k=k+1;
             break;
     end                        
end
i

**python:**

import math
def isPrime(n):
    for i in range(2,int(math.sqrt(n))+1):
        if n%i==0:
            return False
    return True
num = 1
count = 0
while True:
    num += 1
    if isPrime(num):
        count += 1
    if count == 10001:
        break
print (num)
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值