cf B. Little Dima and Equation
http://codeforces.com/contest/460/problem/B
1 import java.util.*; 2 import java.math.*; 3 public class Main { 4 5 public static void main(String []args) 6 { 7 Scanner cin=new Scanner(System.in); 8 int a,b,c; 9 BigInteger a1=new BigInteger("0"); 10 BigInteger a10=new BigInteger("1000000000"); 11 BigInteger a3=new BigInteger("10"); 12 BigInteger [][]cc=new BigInteger[100][1000]; 13 BigInteger []f1=new BigInteger[1000000]; 14 for(int i=1; i<=81; i++) 15 { 16 for(int j=1; j<=5; j++) 17 { 18 BigInteger sum=new BigInteger("1"); 19 BigInteger h=new BigInteger(((Integer)i).toString()); 20 int k=1; 21 while(k<=j) 22 { 23 sum=sum.multiply(h); 24 k++; 25 } 26 cc[i] [j] =sum; 27 } 28 } 29 a=cin.nextInt(); b=cin.nextInt();c=cin.nextInt(); 30 BigInteger h1=new BigInteger(((Integer)b).toString()); 31 BigInteger h2=new BigInteger(((Integer)c).toString()); 32 int cnt=0; 33 for(int i=1; i<=81; i++) 34 { 35 BigInteger a2=new BigInteger("0"); 36 BigInteger hh=new BigInteger(((Integer)i).toString()); 37 BigInteger ans,ans1; 38 ans=cc[i] [a] .multiply(h1).add(h2); 39 ans1=ans; 40 if(ans.compareTo(a1)<=0||ans.compareTo(a10)>0) continue; 41 while(!ans.equals(a1)) 42 { 43 a2=a2.add(ans.mod(a3)); 44 ans=ans.divide(a3); 45 } 46 if(a2.equals(hh)) 47 { 48 f1[cnt] =ans1; 49 cnt++; 50 } 51 } 52 System.out.println(cnt); 53 for(int i=0; i<cnt; i++) 54 { 55 if(i==0) System.out.print(f1[i] ); 56 else System.out.print(" "+f1[i] ); 57 } 58 System.out.print("\n"); 59 } 60 }