【蓝桥杯】--数学 | 倍数问题|等差数列|核桃的数量

《模运算》

1.倍数问题

题目描述

众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数。但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼。现在小葱给了你 nn 个数,希望你从这 nn 个数中找到三个数,使得这三个数的和是 KK 的倍数,且这个和最大。数据保证一定有解。

输入描述

第一行包括 2 个正整数 n, Kn, K。

第二行 nn 个正整数,代表给定的 nn 个数。

其中,1≤n ≤105, 1≤K ≤1031≤n ≤105, 1≤K ≤103,给定的 nn 个数均不超过 108108。

输出描述

输出一行一个整数代表所求的和。

输入输出样例

示例

输入

4 3
1 2 3 4

输出

9

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M 

代码 

import os
import sys

# 请在此输入您的代码
n,k = map(int,input().split())
u = list(map(int,input().split()))

u.sort(reverse=True)
m =[[0] *3 for _ in range(k)]
for i in range(n):
  y = u[i] %k
  if m[y][0] == 0: m[y][0] = u[i]
  elif m[y][1] == 0: m[y][1] = u[i]
  elif m[y][2] == 0: m[y][2] = u[i]

ans = 0
for x in range(0,2*k+1,k):
    for a in range(k): #这里指余数
        for b in range(k):
            c = x -a-b
            if c >= 0 and c<k:
                ans = max (ans,m[a][0] + m[b][b==a] +m[c][(a==c) + (b==c)])
print(ans)

 《GCD与LCM》

2.等差数列

题目描述

数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 N个整数。

现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?

输入描述

输入的第一行包含一个整数 NN。

第二行包含 NN 个整数 A1,A2,⋅⋅⋅,AN​。(注意 A1​ ∼ AN 并不一定是按等差数列中的顺序给出)

其中,2≤N≤105,0≤Ai≤109。

输出描述

输出一个整数表示答案。

输入输出样例

示例

输入

5
2 6 4 10 20

输出

10

样例说明: 包含 2、6、4、10、20 的最短的等差数列是 2、4、6、8、10、12、14、16、 18、20。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M
import os
import sys

# 请在此输入您的代码
from math import *
n = int(input())
a =  list(map(int,input().split()))
a.sort()
d =0
for i in range (1,n): d = gcd(d,a[i]-a[i-1])
if d==0:print(n)
else:print((a[-1]-a[0])//d + 1)

 3.核桃的数量

题目描述

小张是软件项目经理,他带领 3 个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:

  1. 各组的核桃数量必须相同

  2. 各组内必须能平分核桃(当然是不能打碎的)

  3. 尽量提供满足 1,2 条件的最小数量(节约闹革命嘛)

输入描述

输入一行 a,b,c,都是正整数,表示每个组正在加班的人数,用空格分开(a,b,c<30)。

输出描述

输出一个正整数,表示每袋核桃的数量。

输入输出样例

示例

输入

2 4 5

输出

20

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 64M
import os
import sys

# 请在此输入您的代码
from math import *
def lcm(x,y): return x//gcd(x,y)*y
a,b,c = map(int,input().split())
k = lcm(a,b)
print(lcm(k,c))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值