Project Euler:Problem 58 Spiral primes

原创 2015年07月08日 20:48:55

Starting with 1 and spiralling anticlockwise in the following way, a square spiral with side length 7 is formed.

37 36 35 34 33 32 31
38 17 16 15 14 13 30
39 18  5  4  3 12 29
40 19  6  1  2 11 28
41 20  7  8  9 10 27
42 21 22 23 24 25 26
43 44 45 46 47 48 49

It is interesting to note that the odd squares lie along the bottom right diagonal, but what is more interesting is that 8 out of the 13 numbers lying along both diagonals are prime; that is, a ratio of 8/13 ≈ 62%.

If one complete new layer is wrapped around the spiral above, a square spiral with side length 9 will be formed. If this process is continued, what is the side length of the square spiral for which the ratio of primes along both diagonals first falls below 10%?



这题是28题的一个扩展,同样找规律,然后判断质数就行了


#include <iostream>
#include <string>
using namespace std;

int cp[100000000];

bool isPrime(int n)
{
	for (int i = 2; i*i < n; i++)
	{
		if (n%i == 0)
			return false;
	}
	return true;
}

void count_prime(unsigned long long n)
{
	cp[n] = cp[n - 1];
	int a[3];
	a[0] = (2 * n + 1)*(2 * n + 1) - 4 * n;
	a[1] = (2 * n + 1)*(2 * n + 1) - (2 * n + 1) + 1;
	a[2] = (2 * n + 1)*(2 * n + 1) - 6 * n;
	for (int i = 0; i < 3; i++)
	{
		if (isPrime(a[i]))
			cp[n]++;
	}
}

int main()
{
	memset(cp, 0, sizeof(cp));
	cp[0] = 0;
	unsigned long long ans;
	double a, b, res;
	for (unsigned long long i = 1; i < 100000000; i++)
	{
		count_prime(i);
		a = cp[i] * 1.0;
		b = (4 * i + 1)*1.0;
		res = a / b*1.0;
		cout << res << endl;
		if (res < 0.10)
		{
			ans = 2 * i + 1;
			break;
		}
	}
	cout << ans << endl;
	system("pause");
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Project Euler Problem 47 Distinct primes factors

Distinct primes factors Problem 47 The first two consecutive numbers to have two distinct prime f...

project euler problem 5

  • 2010年12月18日 10:58
  • 18KB
  • 下载

Project Euler:Problem 49 Prime permutations

The arithmetic sequence, 1487, 4817, 8147, in which each of the terms increases by 3330, is unusual ...
  • youb11
  • youb11
  • 2015年06月07日 11:12
  • 389

Project Euler:Problem 22 Names scores

Using names.txt (right click and 'Save Link/Target As...'), a 46K text file containing over five-t...
  • youb11
  • youb11
  • 2015年06月01日 21:01
  • 528

Project Euler Problem 32 Pandigital products

Pandigital products Problem 32 We shall say that an n-digit number is pandigital if it makes use ...

Project Euler:Problem 51 Prime digit replacements

By replacing the 1st digit of the 2-digit number *3, it turns out that six of the nine possible valu...
  • youb11
  • youb11
  • 2015年07月01日 19:58
  • 507

Project Euler:Problem 86 Cuboid route

A spider, S, sits in one corner of a cuboid room, measuring 6 by 5 by 3, and a fly, F, sits in the o...
  • youb11
  • youb11
  • 2015年07月22日 17:04
  • 578

Project Euler:Problem 18 Maximum path sum I

By starting at the top of the triangle below and moving to adjacent numbers on the row below, the ma...
  • youb11
  • youb11
  • 2015年05月31日 10:54
  • 683

Project Euler - Problem 5

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any rema...

Project Euler:Problem 50 Consecutive prime sum

The prime 41, can be written as the sum of six consecutive primes: 41 = 2 + 3 + 5 + 7 + 11 + 13 ...
  • youb11
  • youb11
  • 2015年06月07日 14:20
  • 392
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Project Euler:Problem 58 Spiral primes
举报原因:
原因补充:

(最多只允许输入30个字)