zoukankan      html  css  js  c++  java
  • LA 3521 Joseph's Problem

    题意:给你正整数n和k,然后计算从i到n k%i的和;

    思路;如果n小于1000000,直接暴力计算,然后大于1000000的情况,然后在讨论n和k的大小,根据k%i的情况,你会发现规律,是多个等差数列,然后你把这些等差数列加上就是答案。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define ll long long
     5 using namespace std;
     6 
     7 ll n,k;
     8 ll Getsum(ll n)
     9 {
    10     ll sum=0;
    11     for(ll i=1; i<=n; i++)
    12     {
    13         sum+=k%i;
    14     }
    15     return sum;
    16 }
    17 
    18 int main()
    19 {
    20     while(scanf("%lld%lld",&n,&k)!=EOF)
    21     {
    22         if(n<=1000000)
    23         {
    24             printf("%lld
    ",Getsum(n));
    25             continue;
    26         }
    27         ll ans=0;
    28         ans+=max((ll)0,n-k)*k;
    29         for(int i=2; i<=10000; i++)
    30         {
    31             if(i>k) break;
    32             ll x1=k/(i-1)-k/i;
    33             if(k/i>n)continue;
    34             int s=k%(k/(i-1)),e=k%(k/i+1);
    35             if(k/(i-1)>n)
    36             { s=k%n;
    37               x1=n-k/i;
    38             }
    39             ans+=(s+e)*x1/2;
    40         }
    41         if(k>10000)
    42         {
    43            ll m=k/10000;
    44            ans+=Getsum(m);
    45         }
    46         printf("%lld
    ",ans);
    47     }
    48     return 0;
    49 }
    View Code
  • 相关阅读:
    Java 反射机制
    Hibernate学习
    js学习
    如何在jsp中引入bootstrap
    bootstrap学习一
    第二章、初级篇
    定风波
    Java反射机制
    数据库的优化方法
    MySQL常用的查询语句回顾
  • 原文地址:https://www.cnblogs.com/fanminghui/p/4238813.html
Copyright © 2011-2022 走看看