构造平衡布尔函数的简化算法,提点思路

构造平衡布尔函数,当输入为5时就跑不出来了,有没有可以简化算法的方法


#include<stdio.h>
#include<math.h>
int pd(long long  a,long long c)
{
    long long a1=a;
    long long a2;
    long long b1=0,b0=0;
//    if(a1==1||a1==0)
//    {
//        prlongf("%d\n",a1);
//    }
    while(a1>=2){
        a2=a1%2;
//        printf("%d",a2);
        if(a2==1)
         b1++;
        else
         b0++; 
        a1=a1/2;
    }
//printf("%d",a1);
    if(a1==1)
     b1++;
    else
     b0++;
    if((b1+b0)%c!=0)
    {
        b0=b0+(c-(b1+b0)%c);
     } 
//printf("\n");
    if(b1==b0)
    {
        return 1;
     } 
    else
        return 0;
}
int main()
{
    long long  n;
    long long t=0;
    scanf("%lld",&n);
    long long c = pow(2,n);
    long long b = pow(2,c);
    for(long long i=0;i<b;i++)
    {
        if(pd(i,c)==1)
          t++;
          
    }
    printf("%lld元平衡布尔函数有%lld",n,t);
    return 0;
}
#include<stdio.h>
#include<math.h>
int main()
{
    long long n;
    long long t = 0;
    scanf("%lld", &n);
    long long c = pow(2, n);
    long long b = pow(2, c);
    
    // 构造平衡布尔函数
    for (long long i = 0; i < b; i++) {
        long long count = 0;
        long long temp = i;
        while (temp > 0) {
            if (temp % 2 == 1) {
                count++;
            }
            temp /= 2;
        }
        if (count == c / 2) {
            t++;
        }
    }
    printf("%lld元平衡布尔函数有%lld",n,t);
    return 0;
}