法雷级数(POJ-3090和POJ-2478)

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值