在Python中使总和可被P整除的程序

在Python中使总和可被P整除的程序

在Python中,我们可以用以下代码来实现使总和可被P整除的程序:

n, p = map(int, input().split())
arr = list(map(int, input().split()))

# 求出前缀和数组
prefix_sum = [0] * (n+1)
for i in range(1, n+1):
    prefix_sum[i] = (prefix_sum[i-1] + arr[i-1]) % p

# 定义一个字典,存储每个前缀和对p取模的余数出现的最后一个下标
# 如果相同的余数出现了两次,就取下标较大的
last_mod_index = {}
for i in range(n+1):
    last_mod_index[prefix_sum[i]] = i

# 初始化最大下标
max_index = 0

# 遍历前缀和数组,并取其对p取模后的余数
# 如果在之前位置上已经出现过该余数,更新最大下标
for i in range(1, n+1):
    mod = prefix_sum[i] % p
    if mod in last_mod_index:
        max_index = max(max_index, last_mod_index[mod])

    # 更新last_mod_index字典的值
    last_mod_index[mod] = i

# 输出结果
print(max_index)

以上代码中,我们首先读入两个输入参数n和p,以及一个长度为n的整数数组arr。然后,我们利用前缀和数组来求出从arr中的第一个元素开始到第i个元素的和,即prefix_sum[i]。

接着,我们定义了一个字典last_mod_index,用来存储每个前缀和对p取模的余数出现的最后一个下标。在遍历前缀和数组并取其对p取模后的余数时,如果该余数在之前位置上已经出现过,则更新最大下标max_index。

最后,我们输出max_index即可。

下面是一个代码示例:

# 输入样例:
# 5 7
# 1 2 3 4 5
# 输出样例:
# 4

n, p = map(int, input().split())
arr = list(map(int, input().split()))

# 求出前缀和数组
prefix_sum = [0] * (n+1)
for i in range(1, n+1):
    prefix_sum[i] = (prefix_sum[i-1] + arr[i-1]) % p

# 定义一个字典,存储每个前缀和对p取模的余数出现的最后一个下标
# 如果相同的余数出现了两次,就取下标较大的
last_mod_index = {}
for i in range(n+1):
    last_mod_index[prefix_sum[i]] = i

# 初始化最大下标
max_index = 0

# 遍历前缀和数组,并取其对p取模后的余数
# 如果在之前位置上已经出现过该余数,更新最大下标
for i in range(1, n+1):
    mod = prefix_sum[i] % p
    if mod in last_mod_index:
        max_index = max(max_index, last_mod_index[mod])

    # 更新last_mod_index字典的值
    last_mod_index[mod] = i

# 输出结果
print(max_index)

结论

在Python中,我们可以使用前缀和数组和字典来实现使总和可被P整除的程序。具体而言,我们可以先求出前缀和数组,然后定义一个字典存储每个前缀和对p取模的余数出现的最后一个下标。在遍历前缀和数组并取其对p取模后的余数时,如果该余数在之前位置上已经出现过,则更新最大下标。最后,输出max_index即可得到结果。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程