본문 바로가기

Wargame/▷ Wechall

[Wechall] Prime Factory


Wechall.net 워게임 사이트의 첫번째 문제 Prime Factory입니다. 

요약해보자면 각 자리수의 합계도 소수이면서 100만이 넘는 최초의 두 소수를 구하여라 입니다.

정답 적을때는 만약 첫번째 숫자가 1,234,567 이고 두번째 숫자가 8,765,432 이면 12345678765432 으로 입력하라네요.


[C code]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
   int number = 1000000;
   int count = 0;
   int i, j, k;
   char str[100];
 
   while (1)
   {
      if (count == 2)
      {
         printf("\n");
         return 0;
      }
      for (i = 2; i < number; i++)
      {
         if (number%i == 0)
            break;
         else if (i == (number - 1))
         {
            int sum = 0;
            itoa(number, str, 10);
            for (j = 0; j < 10; j++)
            {
               if (str[j] == NULL)
                  break;
               sum += (int)str[j] - 48;
            }
            for (k = 2; k < sum; k++)
            {
               if (sum%k == 0)
                  break;
               else if (k == (sum - 1))
               {
                  printf("%d", number);
                  count++;
                  break;
               }
            }
         }
      }
      number++;
   }
}
cs


[Python code]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
= 1000000;
number = 0;
while 1:
    for i in range(2, a):
        if a % i == 0:
            break
        elif i == a - 1:
            sum = 0
            for j in range(len(str(a))):
                sum += int(str(a)[j])
            for k in range(2, sum):
                if sum % k == 0:
                    break
                elif k == sum - 1:
                    number += 1
                    if number == 2:
                        print str(b) + str(a)
                        exit(0)
                    b = a
    a += 1
cs