Var N,B,k:integer; Begin Write('N = ');ReadLn(N); Write('Искомые числа:'); For N:= 1 to N do Begin B:=N; k:=1; // перед каждой проверкой k:=1 // и если число не делится на любую из своих цифр, то k:=0 While B > 0 do Begin if B mod 10 = 0 then k:=0 // B mod 10 - это остаток от деления B на 10 // то есть, например, 123 mod 10 = 3 else if N mod (B mod 10) > 0 then k:=0; B:=B div 10 // целая часть от деления B на 10 // 123 div 10 = 12 End; if k = 1 then Write(' ',N) End; End.
#include <iostream>
typedef long long ll;
using namespace std;
bool ll_is_valid(ll t, ll N, ll x, ll y)
{
return t / x + (t - x) / y >= N;
}
ll f(ll N, ll x, ll y)
{
ll R = 1;
while (!ll_is_valid(R,N,x,y)) R *= 2;
ll L = R / 2;
while(R - L > 1)
{
ll M = (L + R) / 2;
if (!ll_is_valid(M,N,x,y)) {L = M;}
else {R = M;}
}
return R;
}
int main()
{
ll N,x,y;
cin >> N >> x >> y;
if(x > y) swap( x, y );
cout << f(N, x, y) << std::endl;
}
Begin
Write('N = ');ReadLn(N);
Write('Искомые числа:');
For N:= 1 to N do
Begin
B:=N;
k:=1;
// перед каждой проверкой k:=1
// и если число не делится на любую из своих цифр, то k:=0
While B > 0 do
Begin
if B mod 10 = 0 then k:=0
// B mod 10 - это остаток от деления B на 10
// то есть, например, 123 mod 10 = 3
else if N mod (B mod 10) > 0 then k:=0;
B:=B div 10
// целая часть от деления B на 10
// 123 div 10 = 12
End;
if k = 1 then Write(' ',N)
End;
End.