测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A25670. 连续正整数和

填空题 中等

题目描述

连续正整数和

题目描述

(注:input()输入函数的括号中不允许添加任何信息)

给定一个正整数 n,请计算n最多可以由多少个连续(2个及以上)的正整数相加得到,如果n不能由连续的正整数相加得到,则输出-1。

例如:

n=100;100 可以由以下2组连续的正整数相加得到。

第一组:9、10、11、12、13、14、15、16;

第二组:18、19、20、21、22;

100 最多可以由 8个连续的正整数相加得到,输出8.

例如:

n=8;8不能由连续的正整数相加得到,输出-1.

输入描述

输入一个正整数n(3≤n≤108)

输出描述

输出一个整数,表示 n最多可以由多少个连续的正整数相加得到;如果n不能由连续的正整数相加得到,则输出 -1。

样例输入

100

样例输出

8

参考答案

import math def main(): n = int(input()) t = 8 * n + 1 s = math.isqrt(t) # 计算整数平方根 k_max = (s - 1) // 2 # 最大可能的k值 # 从k_max递减到2检查每个k for k in range(k_max, 1, -1): # 计算k个连续整数的和中除去首项的部分 temp = n - (k * (k - 1)) // 2 # 检查temp是否为正且能被k整除 if temp > 0 and temp % k == 0: print(k) return # 没有找到满足条件的k print(-1) if __name__ == "__main__": main()
上一题 下一题