zoukankan      html  css  js  c++  java
  • 1257: [CQOI2007]余数之和

    Time Limit: 5 Sec  Memory Limit: 128 MB
    Submit: 5999  Solved: 2879
    [Submit][Status][Discuss]

    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。
    1<=n ,k<=10^9

     

    Output

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

    Sample Input

    5 3

    Sample Output

    7
     
    非常巧妙的数论题
    首先可以推出:k%i=k-(int)(k/i)*i
    根据归纳法,可以得出在一段区间内k/i的值不变
    设w=(int)(k/i),而区间的右边界r=k/w
    于是利用等差数列求和公式,得出ans=(r-(i-1))*k-w*(r-i+1)*(r+i)/2
     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 #define LL long long
     6 
     7 LL n,k,w,r,ans;
     8 
     9 int main()
    10 {
    11     scanf("%lld%lld",&n,&k);
    12     if(n>k)
    13     {
    14         ans=(n-k)*k;
    15         n=k;
    16     }
    17     for(int i=1;i<=n;i=r+1)
    18     {
    19         w=k/i;r=k/w;
    20         if(r>n) r=n;
    21         ans+=(r-i+1)*k-w*(r-i+1)*(r+i)/2;
    22     }
    23     printf("%lld
    ",ans);
    24     return 0;
    25 }
  • 相关阅读:
    javaTemplates-学习笔记三
    索引
    WTForms
    session权限限制
    vue-cli脚手架项目中组件的使用
    vue补充
    表单输入绑定
    vue指令系统介绍
    vue-cli脚手架安装和webpack-simple模板项目生成
    rest-framework之视图
  • 原文地址:https://www.cnblogs.com/InWILL/p/9693618.html
Copyright © 2011-2022 走看看