您的位置:首页 > 其它

Project Euler:Problem 64 Odd period square roots

2015-07-14 22:35 441 查看
All square roots are periodic when written as continued fractions and can be written in the form:

√N = a0 +1
a1 +1
a2 +1
a3 + ...
For example, let us consider √23:

√23 = 4 + √23 — 4 = 4 + 1
= 4 + 1
1

√23—4
1 + √23 – 3

7
If we continue we would get the following expansion:

√23 = 4 +1
1 +1
3 +1
1 +1
8 + ...
The process can be summarised as follows:

a0 = 4,1

√23—4
= √23+4

7
= 1 + √23—3

7
a1 = 1,7

√23—3
= 7(√23+3)

14
= 3 + √23—3

2
a2 = 3,2

√23—3
= 2(√23+3)

14
= 1 + √23—4

7
a3 = 1,7

√23—4
= 7(√23+4)

7
= 8 + √23—4
a4 = 8,1

√23—4
= √23+4

7
= 1 + √23—3

7
a5 = 1,7

√23—3
= 7(√23+3)

14
= 3 + √23—3

2
a6 = 3,2

√23—3
= 2(√23+3)

14
= 1 + √23—4

7
a7 = 1,7

√23—4
= 7(√23+4)

7
= 8 + √23—4
It can be seen that the sequence is repeating. For conciseness, we use the notation √23 = [4;(1,3,1,8)], to indicate that the block (1,3,1,8) repeats indefinitely.
The first ten continued fraction representations of (irrational) square roots are:

√2=[1;(2)], period=1

√3=[1;(1,2)], period=2

√5=[2;(4)], period=1

√6=[2;(2,4)], period=2

√7=[2;(1,1,1,4)], period=4

√8=[2;(1,4)], period=2

√10=[3;(6)], period=1

√11=[3;(3,6)], period=2

√12= [3;(2,6)], period=2

√13=[3;(1,1,1,1,6)], period=5
Exactly four continued fractions, for N ≤ 13, have an odd period.
How many continued fractions for N ≤ 10000 have an odd period?



#include <iostream>
using namespace std;

int getPeriod(int n)
{
	int pd = 0;
	int m = 0, d = 1;
	int a0 = int(sqrt(n));
	int a = a0;
	while (a != 2 * a0)
	{
		m = a*d - m;
		d = (n - m*m) / d;
		a = int((sqrt(n) + m) / d);
		pd++;
	}
	return pd;
}

int main()
{
	int count = 0;
	for (int i = 2; i <= 10000; i++)
	{
		if (int(sqrt(i))*int(sqrt(i)) == i)
			continue;
		if (getPeriod(i) % 2 != 0)
			count++;
		//cout << i << " " << getPeriod(i) << endl;
	}
	cout << count << endl;
	system("pause");
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: