//2345国王金币数
//思路:先找出allnum(allnum<=n)使allnum=1+2+3+…+k,同时算出k,则f(allnum)=∑i^2,
//      而f(n)=f(allnum)+(n-allnum)*(k+1).  已知公式∑i^2=k*(k+1)*(2k+1)/6
#include<iostream>
#include<math.h>
using namespace std;

 


void coins(int n)
{
    int k=1;
    int allnum=n;
    k=pow(2*allnum,0.5);
    while(!(2*allnum%k==0 && 2*allnum==k*(k+1)))
    {
        allnum--;
        k=pow(2*allnum,0.5);
    }

    int fun;
    fun=k*(k+1)*(2*k+1)/6+(k+1)*(n-allnum);
    cout<<n<<" "<<fun<<endl;
}

 

 

int main()
{
    int casenum;
    cin>>casenum;
    while(casenum--)
    {
        int n;
        while(cin>>n && n!=0)
            coins(n);

        if(casenum)
            cout<<endl;
    }
    return 0;
}

相关文章:

  • 2022-01-22
  • 2022-12-23
  • 2022-12-23
  • 2021-12-21
  • 2021-06-16
  • 2021-10-27
  • 2021-10-17
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-13
  • 2021-09-03
  • 2021-07-19
相关资源
相似解决方案