Sheldon Numbers 暴力枚举

来源:互联网 发布:单机养宠物软件 编辑:程序博客网 时间:2024/06/06 00:23






题意:求在区间内Sheldon数字的个数

题解:

枚举n  m,然后判断是否可以组成相应的位数

然后再判断是否这个数字是在这个区间内


#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define LL long longint a[100];unsigned long long x,y;bool deal(int len,int n,int m){    if(len==n&&m>1)        return false;    for(int i=0;i<len;){        if(i%(n+m)==0){            for(int j=0;j<n;j++)                a[i++]=1;        }        else if(i%(n+m)==n){            for(int j=0;j<m;j++)                a[i++]=0;        }    }    unsigned long long temp=0;    for(int i=0;i<len;i++)        temp=temp*2+a[i];    if(temp>=x&&temp<=y){        //printf("%d\n",temp);        return true;    }    return false;}int main(){    //freopen("in.txt","r",stdin);    while(scanf("%lld%lld",&x,&y)!=EOF)    {        unsigned long long t1=x,t2=y;        int p1=0,p2=0;        while(x){            p1++;            x/=2;        }        while(y){            p2++;            y/=2;        }        x=t1,y=t2;        LL ans=0;        if(x==0)            x++;        for(int i=1;i<=63;i++){            for(int j=1;j<=63;j++){                for(int k=p1;k<=p2;k++){                    if(k%(i+j)==0||(k-i)%(i+j)==0)                        if(deal(k,i,j))                        ans++;                }            }        }        printf("%lld\n",ans);    }    return 0;}


原创粉丝点击