3 条题解

  • 1
    @ 2023-4-15 16:03:07
    #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
    */
    
    • @ 2023-4-15 16:52:55

      巨!!!!!!!!!写了一个小时卡住了,一看这个就会了,太巨了!!!!

信息

ID
1260
时间
1000ms
内存
256MiB
难度
8
标签
递交数
100
已通过
15
上传者