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


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

Problem58

原题:Starting with 1 and spiralling anticlockwise in the following way, a square spiral with side leng...
  • xiaoman111
  • xiaoman111
  • 2011年06月23日 16:22
  • 160

Project Euler Problem 51-70

题目翻译是从 欧拉计划 | Project Euler 中文翻译站上面Copy 的 Problem 51 Prime digit replacements 通过置换*3的第一位得到的9个数中,有六个是...
  • u011401504
  • u011401504
  • 2015年02月08日 02:22
  • 1667

欧拉回路(Euler Circuit)

定义:若一副图中从某个顶点A走出,经过图中的所有的边,且每条边只经过一次,则称这个环为欧拉回路,如果某幅图含有这样的环,则这幅图叫做欧拉图。 如何判断一幅图是不是欧拉图,也即一幅图中是否含有欧拉回路...
  • shaya118
  • shaya118
  • 2014年12月09日 23:15
  • 1565

Project Euler18题 从上往下邻接和

题目:By starting at the top of the triangle below and moving to adjacent numbers on the row below, the...
  • jiang111_111shan
  • jiang111_111shan
  • 2015年07月16日 09:06
  • 757

project euler problem 29数的多次幂的重复个数

Distinct powers Problem 29 Consider all integer combinations of ab for 2  a  5 and 2  b ...
  • u011466175
  • u011466175
  • 2013年10月20日 13:35
  • 602

极光推送的使用

极光推送的使用
  • zhangying1994
  • zhangying1994
  • 2016年07月03日 14:30
  • 1582

构建Spring源码问题总结

自己动手构建spring源码来追踪源码的实现流程和查看源码。
  • XIAOHAOGE2013
  • XIAOHAOGE2013
  • 2015年08月07日 11:54
  • 834

project Euler上的一些问题

随便做了几题,还是project first,有空再来做 Number spiral diagonals问题 21 22 23 24 25 20  7  8  9 10 19  6  1  2 ...
  • zhanglei0107
  • zhanglei0107
  • 2013年07月01日 21:41
  • 616

【安卓学习之常见问题】 使用Eclipse clean时,出现“cleaning all project has encountered a problem”提示

在使用Eclipse时,经常需要clean下工程,结果每次clean都提示:“cleaning all project has encountered a problem. Errors occurr...
  • ljb568838953
  • ljb568838953
  • 2016年09月18日 09:19
  • 3349

各种语言版本实现欧拉猜想 Euler's sum of powers conjecture

Euler's sum of powers conjecture There is a conjecture in mathematics that held for over 200 ...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年01月07日 12:44
  • 525
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Project Euler:Problem 58 Spiral primes
举报原因:
原因补充:

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