2012-04-10 3 views
1

Я хочу написать код, который принимает любое положительное, четное число (больше 2) и дает мне наименьшую пару простых чисел, которые суммируются до этого числа. Мне нужна эта программа для обработки любого целого числа длиной до 9 цифр.Теория Гольдбаха в C

Моя цель состоит в том, чтобы сделать что-то, что выглядит следующим образом:

Please enter a positive even integer (greater than 2) : 
10 
The first primes adding : 3+7=10. 
Please enter a positive even integer (greater than 2) : 
160 
The first primes adding : 3+157=160. 
Please enter a positive even integer (greater than 2) : 
18456 
The first primes adding : 5+18451=18456. 

Я не хочу, чтобы использовать любую библиотеку, кроме stdio.h. Я не хочу использовать массивы, строки или что-нибудь кроме основного инструментария: scanf, printf, for, while, do-while, if, else if, break, continue и базовые операторы (<,>, ==, = +,! =,%, *,/и т. д.). Пожалуйста, никаких других функций, особенно is_prime.

Я знаю, как ограничить ввод в соответствии с моими потребностями, чтобы он проходил цикл, пока не будет задана действительная запись.

Так что теперь я пытаюсь выяснить алгоритм.

Я думал о запуске время цикла, как-то вроде этого:

#include <stdio.h> 
long first, second, sum, goldbach, min; 
long a,b,i,k; //indices 

int main(){ 

    while (1){ 
     printf("Please enter a positive integer :\n"); 
     scanf("%ld",&goldbach); 
     if ((goldbach>2)&&((goldbach%2)==0)) break; 
     else printf("Wrong input, "); 
     } 

    while (sum!=goldbach){ 
     for (a=3;a<goldbach;a=(a+2)) 
      for (i=2;(goldbach-a)%i;i++) 
       first = a; 
     for (b=5;b<goldbach;b=(b+2)) 
      for (k=2;(goldbach-b)%k;k++) 
     sum = first + second; 
     } 
} 
+0

Можете ли вы дать нам веские основания для таких ограничений. Звучит как домашнее задание или другие типы правил, налагаемые третьей стороной. –

+0

Массивы гораздо более простые, чем 'stdio.h'. Любое решение, которое вы придумываете, не учитывает массивы, будет ужасно неэффективным. – Dave

+0

@JensGustedt да, я забыл упомянуть, что это часть упражнения. – nofe

ответ

2

имеют функцию проверки простоты

int is_prime(unsigned long n) 

И тогда вам нужно только проверить a и goldbach - a ли как премьер , Вы можете, конечно, принять a <= goldbach/2.

И не забудьте правильно обработать goldbach = 4.

Если требования не позволяют определять и использовать ваши собственные функции, сначала игнорируйте их. Решите проблему, используя любые функции, которые вы считаете полезными и удобными. Когда у вас есть рабочее решение с использованием запрещенных функций, вы начинаете заменять его разрешенными конструкциями. Самоопределяемые функции могут быть встроены непосредственно, заменяя return назначением, поэтому вместо if (is_prime(a)) у вас есть код, чтобы определить, является ли a простым и вместо return В результате вы назначаете его is_prime = result; и проверяете эту переменную if (is_prime). Где вы использовали библиотечные функции, переопределите их самостоятельно - эффективность не имеет большого значения - и затем встройте их тоже.

+0

эй спасибо за ответ, однако я хочу достичь этого без функции is_prime. – nofe

+0

Это лишнее требование. В любом случае, вам это нужно, будь то функция или в другой форме, так что просто встройте то, что будет телом функции. –

+1

Действительно странное требование. Вы можете использовать Eratosthenes для создания списка простых чисел и поиска пары из списка, который добавляет к целевому четному числу. – rossum