余数之和sum

给定正整数n和k,求k除以1到n的余数之和。例如,当n=5, k=3时,结果为7。程序需处理1到10^9范围内的输入值。" 124362267,7549540,强化学习深入解析:价值函数与贝尔曼方程,"['强化学习', '价值函数', '策略函数', '最优策略', '贝尔曼方程']
Time Limit:5000MS Memory Limit:165888KB 64bit IO Format:%lld & %llu

Status

Description

给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数。例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7

Input

输入仅一行,包含两个整数n, k。

Output

输出仅一行,即j(n, k)。

Sample Input

5 3

Sample Output

7

Hint

50%的数据满足:1<=n, k<=1000 100%的数据满足:1<=n ,k<=10^9

Source

CQOI2007

意解: 晕..........打表找规律,加暴力对拍,终于A了,打完表后会发现其实解的集合是分块的.并且是形成等差数列;
AC代码:

#include <iostream>
#include <cstdio>

using namespace std;
typedef long long ll;

int main()
{
    ll n,m,ans1,ans2,len,now,L,R,t;
    while(~scanf("%lld %lld",&n,&m))
    {
        ans1 = ans2 = 0;
        t = 1;
        /*for(int i = 1; i <= n; i++)
            ans1 += m % i;*/
        if(n >= m)
            ans2 = (n - m) * m,n = m;
        /*for(int i = 1; i <= m; i++)
            cout<<i<<":"<<m % i<<endl;*/
        L = 0;
        now = m;
        while(true)
        {
            t++;
            R = m / t + 1;
            if(R > now) break;
            if(R > n)
            {
                now = m / t;
                L = m % now;
                continue;
            }
            len = now - R + 1;
            R = L + (len - 1) * (t - 1);
            if(now > n)
            {
                L = m % n;
                len = n - m / t;
            }
            ans2 += (R + L) * len / 2;
            now = m / t;
            if(!now) break;
            L = m % now;
        }
        for(int i = min(now,n); i >= 2; i--) //提前跳出来的数有可能大于n;
            ans2 += m % i;
        cout<<ans2<<endl;
    }
}


### 使用Java计算BigDecimal的平均值余数 在Java中,`BigDecimal` 是一种用于处理高精度数字的类,适合进行精确的数学运算。以下是使用 `BigDecimal` 计算平均值余数的代码示例: #### 平均值计算 平均值可以通过将所有数字相加后除以数字的数量来计算。以下是实现该功能的代码: ```java import java.math.BigDecimal; import java.math.RoundingMode; public class BigDecimalAverage { public static void main(String[] args) { BigDecimal[] numbers = { new BigDecimal("123.45"), new BigDecimal("67.89"), new BigDecimal("101.11"), new BigDecimal("78.90") }; BigDecimal sum = BigDecimal.ZERO; for (BigDecimal num : numbers) { sum = sum.add(num); // 累加每个数字 } int count = numbers.length; BigDecimal average = sum.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP); // 计算平均值 System.out.println("总: " + sum.toString()); System.out.println("平均值: " + average.toString()); } } ``` 上述代码展示了如何通过累加一组 `BigDecimal` 数字并将其除以数量来计算平均值[^1]。 #### 余数计算 余数可以通过 `BigDecimal.remainder(BigDecimal divisor)` 方法计算。以下是一个简单的例子: ```java import java.math.BigDecimal; public class BigDecimalRemainder { public static void main(String[] args) { BigDecimal dividend = new BigDecimal("100.5"); BigDecimal divisor = new BigDecimal("7"); BigDecimal remainder = dividend.remainder(divisor); System.out.println("被除数: " + dividend); System.out.println("除数: " + divisor); System.out.println("余数: " + remainder); } } ``` 在这个例子中,`remainder` 方法返回的是 `dividend` 除以 `divisor` 后的余数[^1]。 ### 注意事项 - 在执行除法或计算平均值时,必须指定舍入模式(如 `RoundingMode.HALF_UP`),因为 `BigDecimal` 的除法操作可能会导致无限小数。 - `BigDecimal.remainder` 方法的行为与数学中的模运算略有不同,它仅返回余数部分而不考虑商的整数部分。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值