Editorialist’s solution was clearer though…

Check for n = 1

the answer is Yes but I think your code will give output No

So change this and it will work hopefully

Sudheera Y S

Nice editorial

if ans==30 it should print “No”

thanks, @raisinten can you help, why this logic giving the wrong answer

public class Test{

```
public static long by10(long temp){
while(true){
if(temp%10==0)
temp = temp/10 ;
else break ;
}
return temp ;
}
public static long by20(long temp){
while(true){
if(temp%20==0)
temp = temp/20 ;
else break ;
}
return temp ;
}
public static void main (String[] args){
Scanner in = new Scanner(System.in);
int t = in.nextInt();
in.nextLine();
for(int tc =0 ;tc<t;tc++){
long n = in.nextLong();
long a = by20(n);
long b = by10(a);
if(n<=1)System.out.println("No");
else{
if(b ==1)
System.out.println("Yes");
else{
long c = by10(n);
long d = by20(c);
if(d==1)
System.out.println("Yes");
else
System.out.println("No");
}
}
}
```

}

}

I feel both your solutions are correct. Your second solution assumes K \leq 10^6 which you should mention

yes. I am eager to know solution for K~10^12 or K~10^18(if exist) as editorialist mentioned. i am still noob in number theory.

Thanks

It won’t work because you’re assuming that the number N can be reduced greedily.

Did you give a thought to number `2000`

?

If we divide it greedily by `20`

as long as possible, we are left with `5`

, which can’t be divided further by `20`

or `10`

.

Let’s do this the other way round.

If we divide it greedily by `10`

as long as possible, we are left with `2`

, which can’t be divided further by `20`

or `10`

.

However, we can produce `2000`

by the product of the sequence `10`

, `10`

and `20`

.

Hope this helps.

It was only my guess that there “might” be some solution for K = 10^{12} or K = 10^{18} My solution too works up to K = 10^6 currently, will try for K = 10^{12}

I still think a recursive approach is so much easier.

My code is working in other IDE(like codeblocks,online compiler,C++shell) but not in codechef ide.Please help!!.Here is my code:

#include<bits/stdc++.h>

using namespace std;

int main()

{

int T;

cin>>T;

while(T–)

{long long int n,count=0;

cin>>n;

while((n%10)==0)

{n/=10;

count++;}

if(ceil(log2(n)) == floor(log2(n)) && count>=ceil(log2(n)))

cout<<“Yes”;

else

cout<<“No”;

```
}
```

}

Please either format your code or link to your submission - the forum software has mangled it and it won’t compile!

You have print Yes and No in new lines

You have missed endl there !

Thats it

Be careful

Thanks a lot!! It worked

Pls like my reply !

Welcome

Thanks a lot !

Consider the testcase:

```
1
40
```

//My approach

int c1;

int isPowerOfTwo(int n)

{

c1=0;

while (n != 1)

{

```
n = n/2;
c1++;
}
return c1;
```

}

int main()

{

int t;

cin>>t;

while(t–)

{

ll n;

cin>>n;

string s=to_string(n);

int p=-1;

for(int i=s.size()-1;i>=0;i–)

{

if(s[i]!=‘0’)

{ p=i;

break;

}

}

ll sum=0;

ll a=0;

for(int i=0;i<=p;i++)

{

sum=10*sum+(s[i]-‘0’);

}

if(__builtin_popcount(sum)==1)

{

int h=isPowerOfTwo(sum);

if(s.size()-p>h)

cout<<“Yes”<<endl;

else

cout<<“No”<<endl;

}

else

{ int f=0;

while(n!=1)

{

if(n%10==0)

n/=10;

else if(n%10!=0)

{cout<<“No”<<endl;

f=1;break;}

}

if(f==0)cout<<“Yes”<<endl;

}

}

return 0;

}

Is this a problem of Dynamic Programming?