# Help me in solving LUCNUM problem

### My issue

In problem statement it is clearly mentioned that 1 is also a lucky number but when my code code runs with test case having total cases=1, and n=1, then it gives output 1 because it is a lucky number but the ide shows it is wrong answer and this test case has expected no output.

### My code

``````#include <stdio.h>

int main(void) {
int t,i=1;
scanf("%d",&t);
while(i<=t){
int n,c=0,d=1,p=0;
scanf("%d",&n);

while(n>0){
if(n%2==0){
p++;
}
n=n/2;

}

if(p%2==0){
printf("%d\n",d);

}
else{
printf("%d\n",c);
}

i++;
}
return 0;
}

``````

Learning course: Prepare for your DSA interviews
Problem Link: CodeChef: Practical coding for everyone

@sunnygupta9968
your logic is absolutely correct .
use long long int instead of int.
and also make cases for odd numbers separately .
like this code

``````#include <stdio.h>

int main(void) {
int t;
scanf("%d\n",&t);
while(t--){
long long int n;
scanf("%lld",&n);
int count2=0;
if (n%2==1){
printf("1\n");
}
else {
while (n%2==0){
n=n/2;
count2++;
}
if (count2%2==0){
printf("1\n");
}
else {
printf("0\n");
}
}
}
return 0;
}
``````

Hey there are two issues, one which is mentioned earlier – the use of a bigger data type.
The second issue is the erroneous counter for odd numbers. For eg: Let’s take the number 13
Now according to your logic, it would first enter the loop, now as 13%2!=0, p wouldn’t increment. Now it would go through the statement n=n/2, which mean 13 would become 6.
And here comes the error, in reality 13 has only 2^0 in it’s prime factorization but according to your logic , p would be incremented once more ( as 6%2==0).
So now p=1, would not be divisible by 2. And hence 13 would give an output 0 where the correct output should’ve been 1.

Here is the corrected code. Making the number half, only when it is divisible else you break the loop

``````#include <stdio.h>

int main() {
int t,i=0;
scanf("%d",&t);
while(i<t){
long long n,c=0,d=1,p=0;
scanf("%lld",&n);

while(n>0){
if(n%2==0){
n=n/2;  //shifting it here
p++;
}

else{
break; //breaking the loop if it is odd
}

}

if(p%2==0){
printf("%d\n",d);

}

else{
printf("%d\n",c);
}

++i;
}