给出正整数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。
1<=n ,k<=10^9
Output
输出仅一行,即j(n, k)。
Sample Input
5 3
Sample Output
7
转换枚举角度,比较有意思。
代码
import java.util.Scanner;
public class Main
{
static long cal(int l,int r)
{
return (long)(l+r)*(r-l+1)/2;
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int k=sc.nextInt();
long ans=(long)n*k;
int last=0;
for(int i=1;i<=n;i=last+1)
{
int size=k/i;
last=size>0?Math.min(k/size, n):n;
ans-=size*cal(i,last);
}
System.out.println(ans);
}
}

本文介绍了一种计算特定数学函数j(n,k)的方法,该函数定义为k除以从1到n的所有整数的余数之和。提供了一个Java程序实现,能够有效地处理大范围内的n和k值。
6127

被折叠的 条评论
为什么被折叠?



