Показать полную графическую версию : Напишите прогу плз
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
Вот на си, влом на паскаль переделывать - сам сделаешь (вроде работает):
#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 Если Вы, молодой человек, будете перекладывать свои задачи на других, всю оставшуюся жизнь у Вас будет паскаль глючный
2 hasherfrog:
да, немного невнимательно прочитал...
а насчет алгоритма - я это тут быстренько в форме написал и не компилил даже...
а вообще ты прав, самому нужно думать, а не других просить ...
Как понимать: "раскладовало на всевозможнае простые числа", может на простые множители или...
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.