3 条题解
-
1
#include<bits/stdc++.h> using namespace std; #define int long long int n,k; long long ans; signed main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>k; ans=n*k; long long cnt=0; for(int i=1;i*i<=k;i++)//在 i*i<k 时枚举 i { cnt=k/i; ans-=(k/i)*i; } signed d=k/n; for(int i=max(1,d);i<cnt;i++)//在 i*i>k 时枚举 k/i 但不是从1开始,有时 n<k 从 n/k 开始 如 n=9 k=53(数据在下面); { int maxa=k/i; int mina=k/(i+1)+1; maxa=min(maxa,n); int z=(maxa+mina)*(maxa-mina+1)/2; ans-=z*i; } cout<<ans; return 0; } /* n=9 k=53 i k/i 1 53 2 26 3 17 4 13 5 10 6 8 7 7 8 6 9 5 */
-
1
#include <bits/stdc++.h> #define int long long using namespace std; int n, k; int ans; signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> k; // sum(k - (k/i) * (i)) ans = n * k; for (int i = 1, ii; i <= n && i <= k; i = ii + 1) { int kdi = k / i; ii = k / kdi; // k/i ~ k/ii == kdi // kdi i // ... // kdi ii ii = min(ii, n); ans -= kdi * ((i + ii) * (ii - i + 1) / 2); } cout << ans << "\n"; return 0; }
-
0
#include<bits/stdc++.h> #define int long long using namespace std; int n,k; int x,y,z; int ans=0; signed main() { cin>>n>>k; x=1; while(x<=n) { y=k/x; if(y==0) break; z=k/y; z=min(z,n); // cout<<x<<":"<<y<<":"<<z<<endl; ans+=((y*(z+x)*(z-x+1))/2); // cout<<":"<<ans<<endl; x=z+1; } ans=n*k-ans; cout<<ans<<endl; return 0; }
- 1
信息
- ID
- 1260
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 100
- 已通过
- 15
- 上传者