zoukankan      html  css  js  c++  java
  • bzoj 1257

    1257: [CQOI2007]余数之和sum

    Time Limit: 5 Sec  Memory Limit: 162 MB
    Submit: 5071  Solved: 2345
    [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。

    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==k-[k/i]*i;然后就可以分段求了。每一段求等差数列和再乘[k/i]。
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    int main()
    {
        ll n,k;
        scanf("%lld%lld",&n,&k);
        ll ans=0;
        if(n>k) { ans=k*(n-k);n=k; }
        ll i=1;
        while(i<=n){
            ll p=k/i,last=k/p;
            if(last>n) last=n;
            ans+=(last-i+1)*k-p*(i+last)*(last-i+1)/2;
            i=last+1;
        }
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    记录s标签范例
    链表问题总结
    Hibernate学习总结
    HDU2460-Network
    CF464C-Substitutes in Number
    CF666E-Forensic Examination
    CF373C-Counting Kangaroos is Fun
    CF558E-A Simple Task
    HDU5669-Road
    CF341D-Iahub and Xors
  • 原文地址:https://www.cnblogs.com/--ZHIYUAN/p/7894999.html
Copyright © 2011-2022 走看看