找回密码
 欢迎注册
楼主: TSC999

[转载] 手串上穿有六颗珠子,求各珠子上的数字。

[复制链接]
发表于 2019-2-15 11:48:51 | 显示全部楼层
pari/gp计算33棵珠子的方法
? u=ffinit(2,5)
%82 = Mod(1, 2)*x^5 + Mod(1, 2)*x^4 + Mod(1, 2)*x^2 + Mod(1, 2)*x + Mod(1, 2)
? a=ffgen(u,a) //产生32阶有限域生成元,上面一行是对应生成多项式
%83 = a
? factor(x^3+a*x+a) //手工试验出一个3次本原多项式,这一步验证不可以因子分解
%84 =
[x^3 + a*x + a 1]
? factor(2^15-1) //因子分解$F_{r^3}$的阶
%85 =
[  7 1]
[ 31 1]
[151 1]
? Mod(x,x^3+a*x+a)^((2^15-1)/7) //依次计算Mod(x,x^3+a*x+a)的(2^15-1)除以7,31,151次不是1证明x^3+a*x+a是本原多项式
%86 = Mod((a^4 + a + 1)*x^2 + a^2*x + 1, x^3 + a*x + a)
? Mod(x,x^3+a*x+a)^((2^15-1)/31)
%87 = Mod(a, x^3 + a*x + a)
? Mod(x,x^3+a*x+a)^((2^15-1)/151)
%88 = Mod((a^2 + a + 1)*x^2 + (a^4 + a^2 + a)*x + a^3, x^3 + a*x + a)

?for(u=1,(2^15-1)/31, ;if(polcoeff(component(Mod(x,x^3+a*x+a)^u,2),2)==0,print(u))) //计算x^2系数为0的点的次数(也就是无穷远直线),得出
1
3
7
15
31
63
127
150
172
208
250
255
301
326
345
417
501
511
528
603
614
632
653
691
792
835
844
924
950
990
1003
1023
1057
这些数据相邻数的差就构成了一个33棵珠子的手链(其中最后一个数1057相当于0)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-2-15 13:14:04 | 显示全部楼层
“里面说明了如果n≡1(mod4)或者n≡2(mod4)而且n包含4k+3形式的素因子,那么不存在长度为n+1的手串”
以上是30楼结论,但它与实际情况不符,例如11无解,11-1=10,10≡2(mod4)但是它不含4k+3素数因子,也就是说它不符合无解的条件,可是无解;
例如13无解,13-1=12,12≡0(mod4),12=4*3含有4k+3形式的素数因子,只符合条件之一(或为选择,算一种条件,而且n包含4k+3形式的素因子,算一种条件)。
从这两个例子看,那条件的关系都是“或”,对于自然数而言,如果按模4来说,只能把它分成4类,有两成已经排除,还有一个问题即其因子含4k+3,整除数中的因子只有3种情况,一个含素数因子4k+1,另一种含4k+3,第三种两种因子都含,这三种情况1,2的各占1/4,而后一种占2/4,所以又排除了1/4*3/4=3/16;   而含有4k+3因子,与n≡3(mod4)是一致的,所以只有1/16的自然数n加1后是有解的,这与实际情况不符。

点评

${\varphi(n^2+n+1)}/{6e}$  发表于 2019-2-15 13:36
这个题目如果猜测答案,显然要猜测在n不是素数的幂时不存在长度为n+1的手串,在n=p^e,p是素数时,长度为n+1的不同手串数目是${\varphi(n^2+n+1)}/{6n}$。 而根据这个结论可以得出不存在长度为22,23的手串。  发表于 2019-2-15 13:34
你的学习一下逻辑学里的因果关系。这句话只是说证明了“如果n≡1(mod4)或者n≡2(mod4)而且n包含4k+3形式的素因子” => "不存在长度为n+1的手串“ 并不是说其它情况存在手串。  发表于 2019-2-15 13:25
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-2-15 15:17:34 | 显示全部楼层
N=10,10-1=9=3*3,  9≡1(mod4)而且含有4k+3的素数因子3,但是它有解,所以仍然不对,应该是n-1后的数如果不是素数或其单素数次幂形式的数皆无解。最起码现在的帖子中没有反例。

点评

论文要求n中去除平方数像以后还含4k+3的素数,才可以确定无解  发表于 2019-2-15 16:02
是的,要求是非素数幂情况  发表于 2019-2-15 15:59
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-2-15 16:02:52 | 显示全部楼层
If n ≡ 1 or 2 mod (4) and if the square free part of n contains at least one prime factor of the form 4k + 3 then there does not exist any projective plane of order n .
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-2-16 11:35:23 | 显示全部楼层
构造法
  1. get_num_prim(p)=
  2. {
  3.     local(r,pass);
  4.     r=factor(p-1);
  5.     for(u=1,p-1,
  6.         pass=u;
  7.         for(v=1,length(r[,1]),
  8.              if(Mod(u,p)^((p-1)/r[v,1])==1, pass=0;break())
  9.         );
  10.        if(pass > 0, break())
  11.     );
  12.     Mod(pass,p)
  13. }

  14. get_prim(p,n)=
  15. {
  16.     if(n==1,
  17.         get_num_prim(p),
  18.         ffgen(ffinit(p,n),a)
  19.     )
  20. }

  21. irriducible(f)=
  22. {
  23.     local(r);
  24.     r=factor(f);
  25.     length(r[,1])==1 && r[1,2]==1
  26. }

  27. isprimitive(f,q)=
  28. {
  29.    local(r,pass);
  30.    r=factor(q^3-1);pass=1;
  31.    for(u=1,length(r[,1]),
  32.         if(Mod(x,f)^((q^3-1)/r[u,1])==1,pass=0;break())
  33.    );
  34.    pass
  35. }

  36. findprimitive(a,p,n)=
  37. {
  38.     local(q,c1,c2,c3,f,found,b);
  39.     q=p^n;c1=c2=0;c3=a/a;f=0;
  40.     b=if(n==1,a,ffprimroot(a));
  41.     for(u=1,q,
  42.         c2=0;
  43.         for(v=1,q,
  44.             c3=a/a;
  45.             for(w=1,q-1,
  46.                 f=x^3+c1*x^2+c2*x+c3;
  47.                 if(irriducible(f)&&isprimitive(f,q),
  48.                     found=1;break()
  49.                 );
  50.                 c3=c3*b
  51.             );
  52.             if(found,break());
  53.             if(v==1,c2=a/a,c2=c2*b);
  54.         );
  55.         if(found,break());
  56.         if(u==1,c1=a/a,c1=c1*b);
  57.     );
  58.     f
  59. }

  60. findany(p,n)=
  61. {
  62.    local(f,q,v);
  63.    a=get_prim(p,n);q=p^n;
  64.    f=findprimitive(a,p,n);v=vector(0);
  65.    if(f==0,print("Fail to find primitive function"),
  66.        for(u=1, q^2+q,
  67.              if(polcoeff(component(Mod(x,f)^u,2),2)==0,v=concat(v,u))
  68.        )
  69.    );
  70.   kill(a);
  71.   v
  72. }

  73. vecmatch(v1,v2)=
  74. {
  75.     local(matched);
  76.     matched=1;
  77.     for(u=1,length(v1),
  78.          if(v1[u]<>v2[u], matched=0;break())
  79.     );
  80.     matched
  81. }

  82. vecrevert(w,m)=
  83. {
  84.      local(r);
  85.      r=vector(length(w));
  86.      r[1]=1;
  87.      for(u=2,length(w),
  88.           r[u]=m+1-w[length(w)+2-u]
  89.      );
  90.     r
  91. }

  92. vecshift(w,m)=
  93. {
  94.     local(h,r);h=length(w);
  95.     if(w[1]==1,
  96.           w,
  97.           for(u=1,length(w)-1,
  98.                if(w[u]+1==w[u+1],
  99.                     h=u;break()
  100.                )
  101.           );
  102.           r=vector(length(w));
  103.           for(u=h+1,length(w),
  104.               r[u-h]=(w[u]-w[h])%m
  105.           );
  106.           r[length(w)+1-h]=(-w[h])%m;
  107.           for(u=1,h-1,
  108.               r[length(w)+1-h+u]=(w[u]-w[h])%m
  109.           );
  110.          r
  111.      )
  112. }

  113. findall(p,n)=
  114. {
  115.     local(v,q,m,r,w,rw,matched);
  116.     q=p^n;m=q^2+q+1;
  117.     r=matrix(0,q);
  118.     v=findany(p,n);
  119.     r=concat(r,v);
  120.     w=vector(q);
  121.     for(u=1,m-1,
  122.          if(gcd(m,u)==1,
  123.              for(k=1,q,
  124.                  w[k]=(v[k]*u)%m;
  125.              );
  126.              w=vecsort(w);
  127.              w=vecshift(w,m);
  128.              rw=vecrevert(w,m);
  129.              matched=0;
  130.              for(k=1,length(r[,1]),
  131.                   if(vecmatch(r[k,],w)||
  132.                        vecmatch(r[k,],rw),
  133.                       matched=1;break();
  134.                   )
  135.              );
  136.              if(!matched, r=concat(r,w))
  137.          )
  138.     );
  139.     r
  140. }

  141. normvec(v,m)=
  142. {
  143.     local(r);
  144.     r=vector(length(v)+1);
  145.     r[1]=1;
  146.     for(u=1,length(v)-1,
  147.          r[u+1]=v[u+1]-v[u]
  148.     );
  149.    r[length(v)+1]=m-v[length(v)];
  150.    r
  151. }

  152. normresult(N)=
  153. {
  154.     local(p,n,q,r,m,rr);
  155.     q=N-1;m=q^2+q+1;
  156.     r=factor(q);
  157.     if(length(r[,1])>1,
  158.        [],
  159.        p=r[1,1];n=r[1,2];
  160.        r=findall(p,n);
  161.        rr=matrix(length(r[,1]),q+1);
  162.        for(u=1,length(r[,1]),
  163.             rr[u,]=normvec(r[u,],m)
  164.        );
  165.        rr
  166.    )
  167. }
复制代码



(11:34) gp > normresult(8)
%216 =
[1 2 10 19  4  7  9  5]

[1 8 11  3 18 10  2  4]

[1 3  8  2 16  7 15  5]

[1 6 17 12  2 11  5  3]

[1 4 22  7  3  6  2 12]

[1 6 12  4 21  3  2  8]

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-7-7 16:04:01 | 显示全部楼层
wayne 发表于 2019-2-13 16:21
mathe能打破纪录吗,

经过数月等待,添加的3个零终于被OEIS接受了

点评

赞伯赞伯  发表于 2019-7-7 20:36

评分

参与人数 1威望 +12 金币 +12 贡献 +12 经验 +12 鲜花 +12 收起 理由
wayne + 12 + 12 + 12 + 12 + 12

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-12-25 21:19:45 | 显示全部楼层
本帖最后由 chyanog 于 2019-12-25 21:35 编辑

mathe已经完美解决了这个问题,还是发一下代码吧,不和C代码比,比前面的Mathematica代码要快得多,也是穷举,但是写法比较适合编译器优化,在6核笔记本上,计算n=8、9、10时都在1秒以内,n=12需要两分钟多。用了动态生成代码,预处理和编译也要花一点时间,建议搭配GCC,VC编译速度比较慢。
  1. n=10;
  2. max=n(n-1)/2+1
  3. sum=n(n-1)+1
  4. F=Symbol@FromCharacterCode[#+63487]&;
  5. syms=Array[F,n-2];
  6. syms=Join[{1},syms,{sum-1-Total@syms}]
  7. vars=Union@@Table[Total/@Partition[syms,i,1,1],{i,n}];
  8. cond=2<=Last@syms<=max&&And@@Thread[1<=Complement[vars,syms]<=sum]&&Simplify@LogicalExpand[Unequal@@vars];//AbsoluteTiming

  9. iter=Table[{F[x+1],2,If[Select[cond,F[x]==Last@Sort@Cases[#,_Symbol,-1]&],Evaluate@If[x<n-2,max,2],0]},{x,n-2}];

  10. cf=Compile[{{\[FormalA],_Integer}},
  11. Module[{B=Internal`Bag[Rest@{0}]},
  12. Do[Internal`StuffBag[B,#,1],##2];
  13. Internal`BagPart[B,All]
  14. ],CompilationTarget->"C",RuntimeOptions->"Speed",RuntimeAttributes->{Listable}
  15. ]&[syms,Sequence@@iter];//AbsoluteTiming

  16. Join@@(Partition[#,n]&/@cf[Range[2,max]])//AbsoluteTiming
复制代码

n=10时的结果
20191225213505.png
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-28 08:08 , Processed in 0.044791 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表