zoukankan      html  css  js  c++  java
  • Project Euler:Problem 58 Spiral primes

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


  • 相关阅读:
    phpstorm插件等相关推荐
    Item Pipeline
    没有返回值的构造函数是怎么完成赋值的?
    vue中如何实现点击变成全屏
    vue操作dom元素的三种方法
    陈同学整理的10个可以写到简历上C++项目
    从四个问题透析Linux下C++编译&链接
    C++隐式推导-auto关键词
    从今天起构建你的JavaScript世界
    vue中实现模态框弹出框动画(旋转弹出)
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7043676.html
Copyright © 2011-2022 走看看