#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int n;
long long f[1000010];
int main()
{
f[3]=0;
for(long long x=4;x<=1000000;x++)
f[x]=f[x-1]+((x-1)*(x-2)/2-(x-1)/2)/2;
while(scanf("%d",&n)!=EOF)
{
if(n<3)
break;
cout<<f[n]<<endl;
}
return 0;
}
这是书上的一个数论题,还算是简单,但是我感觉书上的分析得出的公式还是有点复杂的,其实大体按照书上的格式分析来,在特别求解c(x)的函数的时候,自己来自己分析得到的公式则更加的简单易行。
下面是我自己的代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int n;
long long f[1000010];
int main()
{
f[3]=0;
for(long long x=4;x<=1000000;x++)
{
if(x%2!=0)
f[x]=f[x-1]+(x-3)*(x-1)/4;
else
f[x]=f[x-1]+(x-2)*(x-2)/4;
}
while(scanf("%d",&n)!=EOF)
{
if(n<3)
break;
cout<<f[n]<<endl;
}
return 0;
}