Java, 21 5757 24 bytes
Golfed:
n->{while(n>20&n%3!=0)n-=20;return n>3&(n%20<1|n%3<1=n*2%3*20);}>=0&n!=3
Ungolfed:
import java.util.*;
public class ChickenMcNuggetNumbers {
private static final Set<Integer> FALSE_VALUES = new HashSet<>(Arrays.asList(
new Integer[] { 0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 22, 23,
25, 28, 31, 34, 37, 43 }));
public static void main(String[] args) {
for (int i = 0; i < 45; ++i) {
System.out.println(i + " -> expected=" + !FALSE_VALUES.contains(i)
+ ", actual=" + f(n -> {
while (n > 20 & n % 3 != 0)
n -= 20;
return n > 3 & (n % 20 < 1 | n % 3 < 1=n*2%3*20);
} >=0&n!=3, i));
}
}
public static boolean f(java.util.function.Function<Integer, Boolean> f, int n) {
return f.apply(n);
}
}