結果
問題 | No.2645 Sum of Divisors? |
ユーザー |
![]() |
提出日時 | 2024-02-19 22:43:55 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 136 ms / 2,000 ms |
コード長 | 1,627 bytes |
コンパイル時間 | 1,408 ms |
コンパイル使用メモリ | 135,824 KB |
最終ジャッジ日時 | 2025-02-19 17:24:35 |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 32 |
ソースコード
#include <string.h>#include <algorithm>#include <array>#include <bitset>#include <cassert>#include <cfloat>#include <climits>#include <cmath>#include <complex>#include <ctime>#include <deque>#include <fstream>#include <functional>#include <iomanip>#include <iostream>#include <iterator>#include <list>#include <map>#include <memory>#include <queue>#include <random>#include <set>#include <stack>#include <string>#include <unordered_map>#include <unordered_set>#include <utility>#include <vector>using namespace std;double sum[1001001];double f(long long l,long long r) {double ans = 0;if(l <= 1000000) {ans += sum[min(r,1000000ll)]-sum[l-1];}if(r < 1000000) return ans;ans += log(r+1);ans += (double)(r)/(2*(r+1));l = max(1000001ll,l)-1;ans -= log(l+1);ans -= (double)(l)/(2*(l+1));return ans;}template<typename T>vector<pair<T,pair<T,T>>> quotient_range(T N) {vector<pair<T,pair<T,T>>>ans;T i = 1;for(; i*i <= N; i++) {ans.push_back({N/i,{i,i}});}for(; i >= 1; i--) {T l = N/(i+1)+1;T r = N/i;if(l <= r && ans.back().second.first < l) {ans.push_back({N/l,{l,r}});}}return ans;}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);long long N;cin >> N;for(int i = 1; i <= 1000000; i++) {sum[i] = sum[i-1]+1.0/i;}double ans = 0;for(auto i:quotient_range(N)) {ans += f(1,i.first)*f(i.second.first,i.second.second);}cout << fixed << setprecision(18) << ans << "\n";}