(Problem 49)Prime permutations

7736 단어 Prim
The arithmetic sequence, 1487, 4817, 8147, in which each of the terms increases by 3330, is unusual in two ways: (i) each of the three terms are prime, and, (ii) each of the 4-digit numbers are permutations of one another.
There are no arithmetic sequences made up of three 1-, 2-, or 3-digit primes, exhibiting this property, but there is one other 4-digit increasing sequence.
What 12-digit number do you form by concatenating the three terms in this sequence?
제목 대의:
1487, 4817, 8147이라는 서열은 각각 이전보다 3330씩 증가하고 이 서열은 두 가지 특징이 있다. 1.서열의 모든 수는 질수다.2. 각 네 자리수는 다른 숫자의 한 배열이다.
1, 2, 3위로 구성된 세 질수의 서열에는 상기 성질을 가진 것이 없다.그러나 또 다른 네 자리의 점증 서열이 이 성질을 만족시킨다.
만약 이 다른 서열의 세 수를 연결한다면, 구성된 12자리의 숫자는 얼마입니까?
//(Problem 49)Prime permutations

// Completed on Thu, 13 Feb 2014, 15:35

// Language: C

//**********************************************

//  (C)acutus   (mail: [email protected]) 

//http://www.cnblogs.com/acutus///**********************************************

#include<stdio.h>

#include<stdbool.h>

#include<stdlib.h>

#include<string.h>

int a[1230];



bool prim(int n) 

{

    int i;

    for(i = 2; i * i <= n; i++) {

        if(n % i ==0)  return false;

    }

    return true;

}



int cmp(const void *a, const void *b)

{

    return (*(char*)a - *(char*)b);

}



void init()

{

    int i, j;

    i = 3;

    j = 1;

    a[0] = 2;

    while(j < 1230) {

        if(prim(i)) {

            a[j++] = i;

        }

        i += 2;

    }

}



bool judge(int a, int b, int c)

{

    char A[5], B[5], C[5];

    sprintf(A, "%d", a);

    qsort(A, 4, sizeof(char), cmp);

    sprintf(B, "%d", b);

    qsort(B, 4, sizeof(char), cmp);

    sprintf(C, "%d", c);

    qsort(C, 4, sizeof(char), cmp);

    if(strcmp(A, B)== 0 && strcmp(A, C) == 0)

        return true;

    return false;

}



void solve()

{

    int i, b, c, d;

    i = 0;

    init();

    while(a[i++] < 1000);

    for(; i < 1229; i++) {

        b = a[i];  c = a[i] + 3330;  d = a[i] + 6660; 

        if(d < 9999) {

            if(prim(b) && prim(c) && prim(d)) {

                if(judge(b, c, d)) {

                    printf("%d %d %d
", b, c, d); } } } } } int main() { solve(); return 0; }

 
Answer:
296962999629

좋은 웹페이지 즐겨찾기