連続する数の合計:与えられた正の整数nについて、少なくとも2つの正の整数を含む連続する正の整数の数の合計としてnを表現する方法がいくつあるかを調べてください。

タイトル説明

与えられた正の整数nについて、少なくとも2つの正の整数を含むいくつかの連続する正の整数の合計としてnを表現する方法がいくつあるかを調べてください。たとえば、n = 15の場合、(1 + 2 + 3 + 4 + 5)、(4 + 5 + 6)、(7 + 8)の3つの方法があります。

入力データ

入力データの最初の行は正の整数Tで、これはテストデータのグループの数を表します。後続のT行では、各行に整数n(1≤T≤1000、n≤10^ 9)のテストデータのセットが含まれています。

出力データ

入力データのグループごとに、結果「Case #id:M」の行を出力します。これは、idグループデータの結果がMであり、idが1から始まることを意味します。

サンプル入力

2
3
15

サンプル出力

ケース#1:1
ケース#2:3

経験:
1。a1とnの間の対応する関係を見つけ、nを使用してループ範囲を狭めます
。2。a1を差し引き、検証します。
3.合計式:
Sn = n(A1 + An)/ 2
Sn = n(A1 + A1 + n-1)/ 2
から最小のA1(つまり、A1 = 1)を介して、最大のnを取得します。

import math

T = int(input())
for n in range(T) :
    inputStr = input()    
    if inputStr != "":        
    	M = 0        
    	N = int(inputStr)        
    	maxN = int(math.sqrt(2*N+1/4)-1/2)        
    	for n1 in range(2, maxN+1):            
    	    a1 = int((2*N-n1*(n1-1))/(2*n1))            
    	    if a1 == 0:                
    	        continue            
    	    elif n1*(2*a1+n1-1)/2 == N:                                
    	        M += 1        
    	print("Case #%d: %d" % (n + 1 , M))
    else:
        break

おすすめ

転載: blog.csdn.net/tianxiefenxiang/article/details/107334071