Войти

Показать полную графическую версию : Напишите прогу плз


Only keeper
14-04-2004, 13:49
Народ мне тут для школы надо прогу написать, но совсем нет времени, я бы ее конечно и сам написал... Кароче надо чтобы разкладовало любое четное число на всевозможные простые числа и выводило это на икран. Обезательно с использованием функции, так же можно использовать циклы, операторы прерывания цыклов (break, continue (если это так пишется)): ) Если кто поможет буду очень благодарен, самому лень))

Добавлено:

Блин вот я написал, а оно не работает. Чо такое? У меня вообще помойму паскаль глючный, где можно нормальный найти? Или вообще отправте на мыл плз
Вот то что я написал:

program only18;
var n:integer;
function only (a:integer):integer;
var q,w,e:integer;
begin
if (a>2)and((a mod 2)=0) then
* begin
* *for q:=1 to (a-1) do
* *e:=a-q;
* * * begin
* * * *for w:=1 to q do
* * * *if ((q mod w)<0)or((q mod w)>0) then writeln (q)
* * * end;
* * * begin
* * * *for w:=1 to e do
* * * *if ((q mod w)<0)or((q mod w)>0) then writeln (e);
* *end;
*else writeln ('Clan only for ever! ');
end;
begin
readln (n);
only (n);
readln
end.


Почуму не раьотает?


Исправлено: Only keeper, 15:35 14-04-2004

suxxl
16-04-2004, 20:40
Вот на си, влом на паскаль переделывать - сам сделаешь (вроде работает):
#include<stdio.h>
#include<conio.h>
void main()
{
printf("\n Простые числа от 1 до 1000 :");
int i,j,k;
for(i=1; i<=1000; i++)
 {
 k=0;
 for(j=2; j<i; j++)
 if (int(i/j)==(float)i/(float)j) k++;
 if (k==0) printf(" %i",i);
 }
getch();
}

сам добавишь чтоб до нужного числа было - ломает делать считывание с клавиатуры...

hasherfrog
17-04-2004, 12:16
suxxl
Во-первых, Вы неправильно поняли задачу. Прочитайте еще раз пост  Only keeper'а. Во-вторых, Ваш пример содержит крайне неэффективный алгоритм и проверки. Крайне.

Only keeper
http://fool.exler.ru/sm/old.gif Если Вы, молодой человек, будете перекладывать свои задачи на других, всю оставшуюся жизнь у Вас будет паскаль глючный

suxxl
17-04-2004, 14:51
2 hasherfrog:
да, немного невнимательно прочитал...
а насчет алгоритма - я это тут быстренько в форме написал и не компилил даже...
а вообще ты прав, самому нужно думать, а не других просить ...

Sonic
17-04-2004, 21:49
Как понимать: "раскладовало на всевозможнае простые числа", может на простые множители или...

hasherfrog
19-04-2004, 09:58
Есть у меня подозрение, что Only keeper сам некорректно привел условия задачи. Что-то мне подсказывает, что надо разложить четное число на два простых числа. Потому что если не на два, то вариантов - огромное количество.  Например 4 = 1 +1 + 1 + 1, 2+ 1 + 1, 3 + 1, 2 + 2. А 9998?
Кстати, почему в условиях "четное" -  потому что любое нечетное (кроме 1) - это четное + нечетное.
Вообще, емнип, данная задача имеет отношение к алгоритму шифрования данных RSA.
Короче, меня самого зацепило...
#include <stdio.h>
#include <math.h>

int issample(unsigned int n)
{
   if (!n) return 0;

   if (n <= 23)
   {
       static unsigned int firstten[] = { 1, 2, 3, 5, 7,  11, 13, 17, 19, 23 };
       for (int j = 0; j < 10; j++)
           if (n == firstten[j]) return 1;
       return 0;
   }

   if (!(n&1)) return 0;
   unsigned int limit = (unsigned int)(sqrt((double)n)) + 1;
   for (unsigned int k = 3; k < limit; k+=2)
       if (!(n%k)) return 0;

   return 1;
}

int main(void)
{
   for (unsigned int i = 2; i < 1000; i+=2)
   {
       for (unsigned int j = 1; j < i/2; j++)
           if (issample(j) && issample(i - j))
               printf("%u = %u + %u\n", i, j, i - j);
   }

   return 0;

Хотя думал я над алгоритмом (и вообще над задачей) долго, сам код написан минут за 20, так что ошибки могут быть...




© OSzone.net 2001-2012