![](https://i-blog.csdnimg.cn/blog_migrate/280afc080abf8829d94a7eaf6df159a6.png)
代码:
#技能升级
#发现最大值
def finds(list4):
max=0
flags=-1
for i in range(len(list4)):
if list4[i]>max:
max=list4[i]
flags=i
return max,flags
n,m=map(int,input().split())
list3=[]
list1=[[0 for j in range(2)]for i in range(n)]
#print(list1)
for i in range(n):
list1[i]=list(map(int,input().split()))
list3.append(int(list1[i][0]))
'''
list1=[[10, 5], [9, 2], [8, 1]]
list2=[2, 5, 8]
list3=[10,9,8]
'''
count=0
for i in range(m):
maxs,flags=finds(list3)
count+=maxs
list3[flags]=list3[flags]-list1[flags][1]
if list3[flags]<=0:
list3[flags]=0
#print(count,flags,list3)
print(count)
![](https://i-blog.csdnimg.cn/blog_migrate/963b070e7dc355140d2e184e0085fbba.png)
代码:
import os
import sys
# 请在此输入您的代码
N=1000000007
inv6=166666668
res=0
temp=0
sum=0
n=int(input())
i = 1
while i <= n:
l=i
k=n//i
r=n//(n//l)
# 数论分块
temp=sum
sum=r * (r+1)% N * (2*r + 1) % N * inv6 % N
res=(res + k * (sum-temp)+N) % N #sum-temp减去上半截
i = r+1
print(res)