3090是法雷级数的变形,结果是(法雷级数*2 - 1);2478是(法雷级数-2)
法雷级数定义
R.亨斯贝尔格著李忠翻译的《数学中的智巧》一书,介绍了法雷级数。这里每一行从0/1开始,以1/1结尾,其它数自左至右将所有的真分数按增加顺序排列;第n行是由所有分母小于或等于n的真分数组成,我们称为n阶法雷级数。如下表: F1: 0/1 1/1 F2: 0/1 1/2 1/1 F3: 0/1 1/3 1/2 2/3 1/1 F4: 0/1 1/4 1/3 1/2 2/3 3/4 1/1 F5: 0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1 F6:0/1 1/6 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 5/6 1/1 …… ……………………………… 这里我们想问的是第n行Fn的真分数的个数有多少个呢? 我们设Fn的个数为ψ(n), ψ(n)比 ψ(n-1)增加的个数是分母是n,分子比n小且与n互质的数的个数,这正是欧拉函数φ(n)。即 ψ(n)=ψ(n-1)+ φ(n) ψ(1)=1+φ(1) ψ(2)=ψ(1)+φ(2) ψ(3)=ψ(2)+φ(3) ……………… ψ(n)= ψ(n-1)+ φ(n) 所以 ψ(n)=1+φ(1)+φ(2)+φ(3)+……+φ(n)很容易证明,当n≥3时,欧拉函数φ(n)是个偶数。由此我们得到除ψ(1)=2是偶数外,法雷级数其它各级的个数都是奇数,并且许多是素数。ψ(1)=2,ψ(2)=3,ψ(3)=5,ψ(4)=7,ψ(5)=11,ψ(6)=13,ψ(7)=19,ψ(8)=23,ψ(9)=29,……。/*==========================================================*\
| [yes]递推求欧拉函数phi(i)
\*==========================================================*/
#define N 10000000
ll phi[N];
void famousDT(ll n)
{
ll i, j;
for (i = 1; i <= n; ++i) phi[i] = i;
for (i = 2; i <= n; i += 2) phi[i] /= 2;
for (i = 3; i <= n; i += 2) {
if (phi[i] == i) {
for (j = i; j <= n; j += i)
phi[j] = phi[j] / i * (i - 1);
}
}
}
ll ans[1000005];
int main()
{
ll i;
famousDT(1000000);
ans[1] = phi[1] + 1;
for (i = 2; i <= 1000000; ++i) {
ans[i] = phi[i] + ans[i - 1];
}
ll n;
while (cin>>n && n) {
printf("%lld\n", ans[n] - 2);
}
return 0;
}