説明
1 + K MOD 2 + K MOD正の整数n及びk、カルクJ(N、K)= K MODを与え3 + ... + MOD nはk個
k個のMOD iはiで割ったk個の余りを表します。
例如J(5,3)+ 3 + 0 3 3 + V 1、V 2 + V 3 3 + V 3 + V 4 3 5 = 0 + 1 + = 7 = 3
入力
二つの整数N、Kを含む入力ラインのみ。
1 <=はN、K <= 10 ^ 9
出力
出力のみ一列、すなわち、J(N、K)。
サンプル入力
5 3
サンプル出力
7
分析
$ \総和_ {i = 1} ^ NK \モッズ\ I $
N K-左\ lfloor \ FRAC {K} {I} \ \右\ rfloor I $易得$の\和_ {i = 1} ^
$ NK- \和_ {i = 1} ^ nは左\ lfloor \ FRAC {K} {I}を\ \右\ rfloor I $
間隔が同じ値で割り切れる需要があるため、ブロックが分割することができ
書式#include <iostreamの> の#include <cstdioを> する#include <cmath> 使用して 名前空間はstd; typedefの長い 長いLL。 LL N、K、ANS。 INT メイン(){ scanf関数(" %のLLDの%のLLD "、&N&K); ANS = N * K。 用(LL 1 = 1、R = 0、L <= N; L = R + 1 ){ もし(K / L)R =分(N、K /(1 * K / L))。そうでなければ R = N。 ANS - =(R-L + 1)*(L + R)*(K / L)>> 1 。 } printf(" %のLLD " 、ANS)。 }