Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Напишите прогу плз (http://forum.oszone.net/showthread.php?t=29811)

Only keeper 14-04-2004 13:49 205890

Народ мне тут для школы надо прогу написать, но совсем нет времени, я бы ее конечно и сам написал... Кароче надо чтобы разкладовало любое четное число на всевозможные простые числа и выводило это на икран. Обезательно с использованием функции, так же можно использовать циклы, операторы прерывания цыклов (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.


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


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

suxxl 16-04-2004 20:40 205891

Вот на си, влом на паскаль переделывать - сам сделаешь (вроде работает):
#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 205892

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

Only keeper
Если Вы, молодой человек, будете перекладывать свои задачи на других, всю оставшуюся жизнь у Вас будет
Цитата:

паскаль глючный

suxxl 17-04-2004 14:51 205893

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

Sonic 17-04-2004 21:49 205894

Как понимать: "раскладовало на всевозможнае простые числа", может на простые множители или...

hasherfrog 19-04-2004 09:58 205895

Есть у меня подозрение, что 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, так что ошибки могут быть...


Время: 09:45.

Время: 09:45.
© OSzone.net 2001-