結果
問題 | No.1573 Divisor Function |
ユーザー |
![]() |
提出日時 | 2021-06-27 13:34:37 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 134 ms / 2,000 ms |
コード長 | 732 bytes |
コンパイル時間 | 6,701 ms |
コンパイル使用メモリ | 250,172 KB |
最終ジャッジ日時 | 2025-01-22 14:04:18 |
ジャッジサーバーID (参考情報) |
judge1 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 43 |
ソースコード
#include <stdio.h>#include <bits/stdc++.h>#include <atcoder/all>using namespace atcoder;using mint = modint998244353;using namespace std;#define rep(i,n) for (int i = 0; i < (n); ++i)#define Inf 1000000001mint sum(int n){mint ret = n;ret *= n+1;ret /= 2;return ret;}mint sum(int l,int r){mint ret = sum(r) - sum(l-1);return ret;}int main(){long long n,m;cin>>n>>m;mint ans = 0;for(long long i=1;i<=m;i++){long long ok = i,ng = m+1;while(ng-ok>1){long long mid = (ok+ng)/2;if(n/i == n/mid)ok = mid;else ng = mid;}//cout<<i<<','<<ok<<endl;long long x = n/i;ans += sum(1,x) * sum(i,ok);ans += sum(i,ok) * x;i = ok;}cout<<ans.val()<<endl;return 0;}