Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Const
- X = 100000;
- Var
- Ans : Array[0 .. X - 1] Of LongInt;
- DigitProd, NotZero: Array[5 .. 72, 0 .. 50000 - 1] Of LongInt;
- L, RR, M, J, I, S, R, P, K, Z, U, XX: LongInt;
- Cnt : Array [-27 .. 72] Of LongInt;
- Function Prod(X, Cnt : LongInt) : LongInt;
- Var
- Res : LongInt;
- Begin
- Res := 1;
- For Cnt := 1 To Cnt Do
- Begin
- Res := Res * (X Mod 10);
- X := X Div 10;
- End;
- Prod := Res;
- End;
- Function Sum(X : LongInt) : LongInt;
- Var
- Res : LongInt;
- Begin
- Res := 0;
- While X > 0 Do
- Begin
- Inc(Res, X Mod 10);
- X := X Div 10;
- End;
- Sum := Res;
- End;
- Procedure SolveStupid;
- Var
- SS, PP, X : LongInt;
- Begin
- I := 1;
- For SS := 1 To K - 1 Do I := I * 10;
- For I := I To I * 10 - 1 Do
- Begin
- SS := 0; PP := 1; X := I;
- While X > 0 Do
- Begin
- Inc(SS, X Mod 10); PP := PP * (X Mod 10);
- X := X Div 10;
- End;
- If (SS <> S) Or (PP <> P)
- Then Continue;
- Inc(R); Ans[R] := I;
- End;
- WriteLn(R);
- For I := 1 To R Do WriteLn(Ans[I]);
- End;
- Begin
- Read(S, P, K);
- If K < 6 Then
- Begin
- SolveStupid;
- Halt(0);
- End;
- FillChar(Cnt, SizeOf(Cnt), 0);
- For I := X Div 10 To X - 1 Do
- Begin
- Z := Prod(I, 5);
- If (Z = 0) Or (Z > P) Or (Z * 9 * 9 * 9 < P) Then Continue;
- U := Sum(I);
- If (U + K - 5 > S) Or (U + 27 < S) Then Continue;
- Inc(Cnt[U]);
- NotZero[U][Cnt[U]] := I;
- DigitProd[U][Cnt[U]] := Z;
- End;
- U := 1; XX := 0;
- For I := 1 To K - 1 - 5 Do
- Begin
- Inc(XX, U);
- U := U * 10;
- End;
- Z := 0;
- For I := U + XX To U * 10 Do
- Begin
- Z := Prod(I, K - 5);
- If Z = 0 Then Continue;
- U := Sum(I);
- For J := 1 To Cnt[S - U] Do
- Begin
- If DigitProd[S - U][J] * Z = P Then
- Begin
- Inc(R);
- Ans[R] := I * X + NotZero[S - U][J];
- End;
- End;
- End;
- WriteLn(R);
- For I := 1 To R Do WriteLn(Ans[I]);
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement