3800 奇数还是偶数(同余)

1. 问题描述:

给定一个整数 n,它可以被表示为一个 k 位的 b 进制数,如下所示:
n = a1⋅ b ^ k−1 + a2⋅ b ^ k−2 + … + ak−1⋅ b + ak
举例说明,如果 b = 17,k = 3,a = [11,15,7],那么 n=11⋅172+15⋅17+7=3179+255+7=3441。请你判断 n 是奇数还是偶数。

输入格式

第一行包含整数 T,表示共有 T 组测试数据。每组数据第一行包含两个整数 b 和 k。第二行包含 k 个整数 a1,a2,…,ak。n 的 b 进制表示不含前导 0,也就是说只有 k = 1 时,a1 才有可能是 0。

输出格式

每组数据输出一行结果,n 是偶数则输出 even,奇数则输出 odd。

数据范围

1 ≤ T ≤ 10,
2 ≤ b ≤ 100,
1 ≤ k ≤ 10 ^ 5,
0 ≤ ai < b,

同一测试点内所有 k 的和不超过 10 ^ 5。

输入样例:

4
13 3
3 2 7
10 9
1 2 3 4 5 6 7 8 9
99 5
32 92 85 74 4
2 2
1 0

输出样例:

even
odd
odd
even
来源:https://www.acwing.com/problem/content/description/3803/

2. 思路分析:

分析题目可以知道我们需要求解n对应的表示式对2取余的结果,对于加法和乘法是有相应的同余关系的(可以拆开计算同余关系),由n的表达式可以知道b ^ k与b模2是同余的,所以化简一下表达式就可以得到如下图中的式子,进一步可以发现当b为偶数的时候那么只需要看ak即可,如果为奇数则看a1 + a2 + ... ak。

3. 代码如下:

class Solution:
    def process(self):
        T = int(input())
        for c in range(T):
            b, k = map(int, input().split())
            a = list(map(int, input().split()))
            _sum = 0
            for i in range(k):
                _sum += a[i]
            res = _sum
            if b % 2 == 0:
                # b为偶数则看最后一个数字
                res = a[-1]
            if res % 2:
                print("odd")
            else:
                print("even")


if __name__ == '__main__':
    Solution().process()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值