HYSBZ - 1257 余数之和sum (技巧&规律)
来源:互联网 发布:网络营销策划案模板 编辑:程序博客网 时间:2024/05/22 23:57
HYSBZ - 1257
余数之和sum
Time Limit: 5000MS Memory Limit: 165888KB 64bit IO Format: %lld & %llu
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
思路:
先打出一些小一点的数的(k%i(1<=i<=n))的表,可以看出规律,
当n>=k时,
1、从k到n的数全为k;
2、从n/2到k的数为一个单调递减的公差为1的等差数列;
3、从n/3到n/2的数为一个单调递减的公差为2的等差数列;
4、从n/4到n/3的数为一个单调递减的公差为3的等差数列;
..........
知道这个规律后,可以先求出n*k的值,这是总的值,再用总的值减去多算的部分。
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<iostream> #include<queue> #define INF 0x3f3f3f3f #define IN __int64 #define ull unsigned long long #define ll long long #define N 1000010 #define M 1000000007 using namespace std; int main(){ll n,m;int i,j;while(scanf("%lld%lld",&n,&m)!=EOF){ll ans=n*m;n=n>m?m:n;for(i=1,j=0;i<=n;i=j+1)//i代表一个数列的起始位置,j代表一个数列的终止位置。{j=min(n,m/(m/i));ans-=(m/i)*(j-i+1)*(i+j)/2;}printf("%lld\n",ans);}return 0;}
0 0
- HYSBZ - 1257 余数之和sum (技巧&规律)
- HYSBZ 1257:余数之和sum【数学】
- bzoj 1257:余数之和sum
- 1257: [CQOI2007]余数之和sum
- 1257: [CQOI2007]余数之和sum
- 1257: [CQOI2007]余数之和sum(数学分段统计)
- BZOJ 1257 余数之和sum (思维 数学 分段)
- BZOJ 1257 余数之和sum (取模原理+分块)
- BZOJ 1257 [CQOI2007]余数之和sum 题解
- bzoj 1257 [CQOI2007] 余数之和 sum 题解
- BZOJ 1257: [CQOI2007]余数之和sum
- 【BZOJ 1257】 [CQOI2007]余数之和sum
- 【BZOJ 1257】 [CQOI2007]余数之和sum
- bzoj--1257--余数之和sum(数学)
- bzoj 1257: [CQOI2007]余数之和sum
- bzoj 1257: [CQOI2007]余数之和sum
- bzoj 1257: [CQOI2007]余数之和sum
- BZOJ 1257 [CQOI2007]余数之和sum
- Volley应用解析
- getpass函数用法
- 如何掌握程序语言
- easyui 列表里下拉框联动
- FreeMarker最简单的例子(1)
- HYSBZ - 1257 余数之和sum (技巧&规律)
- Python抓取中文网页
- 输出重定向函数
- NodeJS实战
- 线程池的原理及实现
- Java基础知识
- Exynos4412 中断驱动开发(一)—— 中断基础及中断的注册过程
- 模拟迅雷下载程序 多线程
- (一)进程调度的相关算法