超氧化钾

Description
作为一个化学小考只有77分的同学,小W感觉很有压力,所以他决定搞化学。今天他开始研究超氧化钾,这是一种很神奇的离子化合物,在高温下空间结构是立方体,如下图所示。有一天教黄交给了小W一个任务:根据教黄多年淘金的经验,他发现超氧化钾有一个神奇的性质就是如果一组有序的整数(x,y,z)满足z=x mod 1+x mod 2+…+x mod y,那么对于超氧化钾来说这个位置上的离子就是一个关键离子。通过用回旋加速器得到高速粒子来攻击这个离子,他就可以获得铜铝制金法的催化剂。现在教黄想知道对于一个给定的x和y对应的z值是多少。
在这里插入图片描述

Input
两个整数x,y。

Output
一个整数z。

Sample Input
1 1

Sample Output
0

Data Constraint
40%的数据,y<=10^5。
100%的数据,1<=x,y<=10^9。

.
.
.
.
.
.
分析
对于一段连续的i…j,如果除k的商相同,那么除k的余数是一个等差数列。这样每一段都可以O(1)求出。
这样问题就变成了对于k/i=p,找到最大的j,使n/j=p。不难发现,若p=0,则j=n。否则j=k/p。

.
.
.
.
.

程序:

#include<iostream>
#include<cstdio>
using namespace std;

int x,y,j,x1,y1;
long long ans;

int main()
{
	scanf("%d%d",&x,&y);
	for (int i=1;i<=y;i=j+1)
	{
		int p=x/i;
		if (p==0) j=y; else j=min(x/p,y);
		x1=x%i;
		y1=x%j;
		ans+=(long long)(x1+y1)*(j-i+1)/2;
	}
	printf("%lld\n",ans);
	return 0;
}
posted @ 2019-01-24 18:17  银叶草  阅读(1546)  评论(0编辑  收藏  举报
Live2D