[ create a new paste ] login | about

Link: http://codepad.org/TPp0wIAt    [ raw code | fork ]

C, pasted on May 7:
/*
    1から始めて, 以下のように反時計回りに数字を並べていくと, 
    辺の長さが7の渦巻きが形成される.
    面白いことに, 奇平方数が右下の対角線上に出現する. 
    もっと面白いことには, 対角線上の13個の数字のうち, 8個が素数である. 
    ここで割合は8/13 = 62%である.

    渦巻きに新しい層を付け加えよう. すると辺の長さが9の渦巻きが出来る. 
    以下, この操作を繰り返していく. 対角線上の素数の割合が10%未満に落ちる最初の辺の長さを求めよ.
*/

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>

bool isPrime(int num) {
    int i;

    if( num < 2 ) return false;
    if( num == 2 ) return true;
    if( num % 2 == 0 ) return false;

    for( i = 3; i * i <= num; i += 2 ) {
        if( num % i == 0 ) return false;
    }

    return true;
}

int main(void) {
    int num = 1;
    int primeCnt = 0, sideLen = 1;
    int add = 2;
    int i;

    while( true ) {
        sideLen += 2;
        for( i = 0; i < 4; i++ ) {
            num += add;
            if( isPrime(num) ) {
                primeCnt++;
            }
        }

        if( (double)primeCnt / (2 * sideLen - 1) < 0.1 ) {
            printf("%lld\n", sideLen);
            break;
        }
        add += 2;
    }

    return 0;
}


Create a new paste based on this one


Comments: