欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

仔细分析算法还可以发现这是一个数列

仔细分析算法还可以发现这是一个数列

base =====>为namehash
char buffer[9] = {0};
unsigned int namehash = base;
for (int i=0; i<8; i++)
{
 buffer[i] = (namehash>>(i+1))&0x1;
}
buffer[8] = 1;
int nseqidlen;
char seqid[31];
byte nowbyte;
for (i=0; i<nseqidlen; i++)
{
 nowbyte = seqid[i];
 int t1 = (namehash>>(i%31))%10;
 int tem1 = (t1 + nowbyte -0x30)%10;
 if (tem1==1)
 {
  buffer[0] ^= 1;
  continue;
 }
 if (buffer[tem1-2]!=1)
 {
  error;
 }
 if (tem1-2>=1)
 {
  for (i=0; i<tem1-2; i++)
  {
   if (buffer[i] == 1)
   {
    error;
   }
  }
 }
 buffer[tem1-1] ^= 1;
}

通过对tem1 的一系列取值,可以达到对其中一位进行反位的功能,前提是这一位前面都为0.
这个取值是一个数列
让第1位反位  1 
让第2位反位  1 2 1
让第3位反位  1 2 1 3 1 2 1
让第4位反位  1 2 1 3 1 2 1 4 1 2 1 3 1 2 1
通项式是 f(n) = f(n-1)+n+f(n-1);f(1)=1;
int count;
void get_reserve_string(int num, char *buffer)
{
    if (num==1)
    {
        sprintf(buffer+count, "%1d", 1);
        count++;
        return;
    }
    get_reserve_string(num-1, buffer);
    sprintf(buffer+count, "%1d", num);
    count++;
    get_reserve_string(num-1, buffer);
    return;
}
用来生成这个数列.
//这里用的是最正常的办法,没有优化!!!! 对buffer中每一个1进行反位
            for (i=0; i<9; i++)
            {
                if (buffer[i]==1)
                {
                    memset(stringbuffer, 0, 520);
                    count = 0;//全局置0
                    get_reserve_string(i+1, stringbuffer);
                    
                    for (int j =0; j<count; j++)
                    {
                        t1 = (namehash>>((key_cur+j)%31))%10;
                        if (t1 <= (stringbuffer[j]-0x30))
                        {
                            key[key_cur+j] = stringbuffer[j] - t1;
                        }
                        else
                            key[key_cur+j] = 10 + stringbuffer[j] - t1;
                    }
                    key_cur += count;      
                }
            }
唉,我当时注册的时候,是12点以前,但是老是注册不成功,没有办法,运气不好,祝福你们拉
ps 
sar就是带符号的右移,定义成int就可以了,如果是shr的话,定义为unsigned int

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功