Поиск натуральных чисел.
Мне тут задали задачу на С++, а ч незнаю как ее решать!!! Помогите кто может вроде бы задача простая, а я решить немогу :( . Заранее очень благодарен за помощь.
Вот задание:
Найти все натуральные числа не превосходящие N (задается с клавиатуры) и делящиеся на каждую из своих цифр.
Простым перебором?
Да, надеюсь это просто???
int main(void)
{
int N = 100;
int flag;
for(int i = 3; i < N; i++)
{
flag = 1;
for(int j = 2; j < [color=green](i/2)+1[/color]; j++)
if(i % j == 0) flag = 0;
if(flag) printf("%d ", i);
}
putchar('\n');
return 0;
}
во 2-ом форе вместо j < i можно достаточно вроде взять j < (i/2+1)
int main(void)
{
int N = 100;
int flag;
for(int i = 3; i < N; i++)
{
flag = 1;
for(int j = 2; j < i; j++)
if(i % j == 0) flag = 0;
if(flag) printf("%d ", i);
}
putchar('\n');
return 0;
}
во 2-ом форе вместо j < i можно достаточно вроде взять j < (i/2+1) или минус 1
точно не помню
Насколько я понял, эта программа найдет все простые числа, а нужно те, которые делятся на каждую из своих цифр, например, 12 - делится и на 1, и на 2.
Насколько я понял, эта программа найдет все простые числа, а нужно те, которые делятся на каждую из своих цифр, например, 12 - делится и на 1, и на 2.
int ifBelong(int , int );
int main(void)
{
int N = 100;
int flag;
for(int i = 3; i < N; i++)
{
flag = 1;
for(int j = 2; j < (i/2+1); j++)
if(ifBelong(i,j) && i % j)
{
flag = 0;
break;
}
else if(i % j == 0)
{
flag = 0;
break;
}
if(flag) printf("%d ", i);
}
putchar('\n');
return 0;
}
int ifBelong(int num, int j)
{
while(num != 0)
{
if((num%10) == j) return 1;
num = num / 10;
}
return 0;
}
:-?P(
или опять ме поняла что делать
:-?P(
Ну что-то вроде этого, только мне кажется цикл по j надо делать от 2 до 9 (других цифр-то нет, на 1 по-любому делиться будет, вот только что с нулем делать это я не представляю).
Ну что-то вроде этого, только мне кажется цикл по j надо делать от 2 до 9 (других цифр-то нет, на 1 по-любому делиться будет, вот только что с нулем делать это я не представляю).
с нулем все нормально, т.к. j не может быть нулем
ну а насчет от 2 до 9 не уверенна
с нулем все нормально, т.к. j не может быть нулем
ну а насчет от 2 до 9 не уверенна
Ну если нуль не брать в расчет, то все будет в шоколаде.
Насчет от 2 до 9.
Если проверять числа однозначные, то согласен будут выполняться лишние итерации.
Но если проверять даже двузначные числа свыше 20, то тут лишних итераций будет куда больше, например, число 44 - итераций будет 23 вместо 8.
Вообще наиболее оптимальным было бы сразу определить цифры числа и проверять только их.
Ну если нуль не брать в расчет, то все будет в шоколаде.
Насчет от 2 до 9.
Если проверять числа однозначные, то согласен будут выполняться лишние итерации.
Но если проверять даже двузначные числа свыше 20, то тут лишних итераций будет куда больше, например, число 44 - итераций будет 23 вместо 8.
Вообще наиболее оптимальным было бы сразу определить цифры числа и проверять только их.
Огромное спасибо всем за помощь!!!
Огромное спасибо всем за помощь!!!
надеюсь ты заметил что 2-ой вариант решения он с багом :)
т.к. подходит для j - одназначное число + нам надо проверить
что данное число делится на каждую из цифр, которая в него входит.
Но если честно задача меня запутала, т.к. простое число - это
число которое делится на 1 и само себя(т.е. не имеет делителя),
поэтому условие насчет цифр весьма странно для меня и подходит
для чисел из одной цифры или состоящим из единиц(111 например).
обязательно надо добавить проверку на ноль
надеюсь ты заметил что 2-ой вариант решения он с багом :)
т.к. подходит для j - одназначное число + нам надо проверить
что данное число делится на каждую из цифр, которая в него входит.
Но если честно задача меня запутала, т.к. простое число - это
число которое делится на 1 и само себя(т.е. не имеет делителя),
поэтому условие насчет цифр весьма странно для меня и подходит
для чисел из одной цифры или состоящим из единиц(111 например).
Ну почему же?
А как же 12, 24, 48 и всякие, состоящие из одинаковых цифр, например 22, 444, 3333?
Ну почему же?
А как же 12, 24, 48 и всякие, состоящие из одинаковых цифр, например 22, 444, 3333?
так простые числа не имеют делителя (кроме единицы), поэтом 333 и т.д.
это не простое число
так простые числа не имеют делителя (кроме единицы), поэтом 333 и т.д.
это не простое число
Но в задаче не было речи о простых числах, шла речь о натуральных числах.
Но в задаче не было речи о простых числах, шла речь о натуральных числах.
ну тогда меня на мыло :D
за что сказали спасибо не знаю :roll:
Но в задаче не было речи о простых числах, шла речь о натуральных числах.
int ifBelong(int );
int main(void)
{
int N = 100;
for([color=green]int i = 1[/color]; i < N; i++)
{
if(ifBelong(i)) printf("%d ", i);
}
putchar('\n');
return 0;
}
int ifBelong(int num)
{
int j = num;
while(j != 0)
{
if((j%10) && num%(j%10) ) return 0;
j = j / 10;
}
return 1;
}
надеюсь багов нет
int ifBelong(int );
int main(void)
{
int N = 100;
for(int i = 3; i < N; i++)
{
if(ifBelong(i)) printf("%d ", i);
}
putchar('\n');
return 0;
}
int ifBelong(int num)
{
int j = num;
while(j != 0)
{
if((j%10) && num%(j%10) ) return 0;
j = j / 10;
}
return 1;
}
надеюсь багов нет
все ок, только не выдает чисел 1 и 2, а они тоже натуральные (цикл надо начать с 1).
все ок, только не выдает чисел 1 и 2, а они тоже натуральные (цикл надо начать с 1).
забыла фор поправить, ух на на меня
{
int j = num;
while(j!=0)
{
int k = j%10;
if((k==0)||((num%k)!=0))return 0;
j = j/10;
}
return 1;
}
Мне кажется, что например 10 не делится на все свои цифры.
int ifBelong(int );
int main(void)
{
int N = 100;
for(int i = 1; i < N; i++)
{
if(ifBelong(i)) printf("%d ", i);
}
putchar('\n');
return 0;
}
int ifBelong(int num)
{
int j = num;
while(j != 0)
{
if([color=red]!(j%10) || num%(j%10)[/color] ) return 0;
j = j / 10;
}
return 1;
}
ну тогда можно так :)
Мне кажется, что например 10 не делится на все свои цифры.
{
int j = num;
while(j!=0)
{
int k = j%10;
if((k==0)||((num%k)!=0))return 0;
j = j/10;
}
return 1;
}
Это как?
0 - мы договорились не трогать, так как деление на нуль ни к чему хорошему не приведет.
1 - на 1 делятся все числа, в том числе (каламбур) и число 10.
Что не так?
Это как?
0 - мы договорились не трогать, так как деление на нуль ни к чему хорошему не приведет.
1 - на 1 делятся все числа, в том числе (каламбур) и число 10.
Что не так?
хэвре(друзья :)) пусть автор топика разберется что трогать или нет
в конце концов изначально задача не была понята мною правильно
у меня нет деления на ноль
в С если идет o or(||) и первое условие выполняется, тогда второе не проверяется(оптимизация языка)
Бсем спасибо за помощь :) :)