結果
| 問題 | No.1252 数字根D | 
| コンテスト | |
| ユーザー | 👑  SPD_9X2 | 
| 提出日時 | 2020-10-10 02:10:30 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 73 ms / 2,000 ms | 
| コード長 | 895 bytes | 
| コンパイル時間 | 165 ms | 
| コンパイル使用メモリ | 82,304 KB | 
| 実行使用メモリ | 67,456 KB | 
| 最終ジャッジ日時 | 2024-07-20 15:28:47 | 
| 合計ジャッジ時間 | 1,846 ms | 
| ジャッジサーバーID (参考情報) | judge1 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 1 | 
| other | AC * 14 | 
ソースコード
"""
https://yukicoder.me/problems/no/1252
桁ごとに和を取っていき、1桁にする演算
それをd進法でやる
A以上B以下に関してその総和を求める
0以上X以下の答え=f(X)さえ求められれば
f(B)-f(A-1)で答えが求まる
3進法で検証
0
1
2
10,1
11,2
12,10,1
20,2
21,10,1
22,11,2
100,1
→1,2,3…dを繰り返す?
"""
def Dsum(num,d):
    #print (num,d)
    if num < d:
        return num
    ret = 0
    while num > 0:
        ret += num % d
        num //= d
    return Dsum(ret,d)
def f(x,d):
    ans = (x // (d-1)) * (d * (d-1) // 2)
    rem = x % (d-1)
    ans += (1+rem) * rem // 2
    return ans
from sys import stdin
TT = int(stdin.readline())
for loop in range(TT):
    d,A,B = map(int,stdin.readline().split())
    if A == B == 0:
        print (0)
        continue
    if A == 0:
        A += 1
    print( f(B,d)-f(A-1,d) )
            
            
            
        