- 注册时间
- 2017-12-7
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 3243
- 在线时间
- 小时
|
楼主 |
发表于 2022-2-25 01:06:39
|
显示全部楼层
我忽然想到了一个作死方法……取模然后枚举
取模的结果告诉我,符合条件的结果如果存在,会满足一个神奇的规律:
对mod p=19,23,29,43,我们发现枚举得不到正确答案- for(i=1,p,for(j=1,p,my(v=vector(p,x,((((x^2-i)^2-j)^2)-1)%p+1));my(counter=Vec(0,p));for(k=1,p,counter[v[k]]+=1);my(g=vecsort(counter,,4));if(g[1]+g[2]==16,print([i,j]))))
复制代码
出现这个问题的原因是,在mod 19,23,29,43下都有两个整数根同余。验算知,对50000以内的素数p,只有这四个mod会出问题:- parforprime(p=17,50000,my(flag=0);for(i=1,p,for(j=1,p,my(v=vector(p,x,((((x^2-i)^2-j)^2)-1)%p+1));my(counter=Vec(0,p));for(k=1,p,counter[v[k]]+=1);my(g=vecsort(counter,,4));if(g[1]+g[2]==16,/*print([p,[i,j]]);*/flag=1;break));if(flag==1,break));if(flag==0,print([p,"flag"])))
- [19, "flag"]
- [23, "flag"]
- [29, "flag"]
- [43, "flag"]
- cpu time = 6min, 29,442 ms, real time = 25,988 ms.
复制代码 进一步的分析发现,对17,37和53,看上去像是碰到了fermat小定理生效的情形,计算出的表达式必须形如((x^4-j)^2-k)^2 mod p,这是不正确的,因为((x^2-j)^2-k)^2至多有8个互不相同的整数根
于是我们可以得知,这16个两两不同的根,在mod17,19,23,29,37,43,53这7个数字下存在同余。
有点可惜的是这个思路走不下去了。
因为p上千之后,总存在k,l使得(((x^2-1)^2-j)^2-k)^2-l=0(mod p)对j=1或j=2(i=1)成立,这导致枚举根本得不到任何有效的信息
补充内容 (2022-2-25 16:34):
15小时以前脑子出了点问题……比如对mod53,可能会出现(((x^2-53i)^2-j)^2-k)^2-l这样的形状,在mod53的意义下53i被消掉——也就是对17,37和53,可能会出现,平方之后要减的第一个数字是它们的倍数 |
|