数学星空 发表于 2010-1-15 10:11:55

根据45#,我们有340万个平均22位最多28位的整数需要分解因子.
你可以把需要分解的整数贴上来,或许我们可以分批来分解,先将容易分解的选出来,对于不能分解成功的我们再一一用更好的软件或者程序将其分解至到判定为素数为止...

mathe 发表于 2010-1-15 10:20:02

340万个数太多了,生成文件有点大
其实要分批很简单,大家给运行上面的程序,稍微修改一下程序,让程序输出部分数据就可以了

mathe 发表于 2010-1-15 10:54:16

Pari/Gp 代码,在我的笔记本上大概每秒处理5个数据左右
N()=
{
8
}

K()=
{
    N()-2
}

output()=
{
    local(V,MM,RR,uu,f,v,a,b);
    MM=M;
    RR=R;
    V=MM*MM+RR;
    c=c+1;
    f=divisors(V);
    for(u=1,length(f),
      v=f;
      if(v*v>V, next());
      if((v+MM)%RR==0,
         a=(v+MM)/RR;
         b=(V/v+MM)/RR;
         if(a>n,
               n=a;
               n=b;
               write("out.txt",n)
         )
      )
    );
    if(c%100==0, print("process " c " lines"))
}

search(level)=
{
    local(ll,uu);
    if(level>=K(),
       output(),
       ll=ceil(M/R);
       uu=floor((N()-level)*M/R);
       if(ll<=n,ll=n+1);
       for(i=ll,uu,
          if(gcd(M,i)!=1, next());
          n=i;
          M=M*i;
          R=R*i-M;
          A=A+1;
          search(level+1);
          A=A-1
       )
    )
}

search0()=
{
   n=vector(8);
   M=vector(8);
   R=vector(8);
   A=vector(4);
   c=0;
   for(i=2,7,
      n=i;
      R=i-1;
      M=i;
      A=A+1;
      search(1);
      A=A-1;
   )
}

mathe 发表于 2010-1-15 11:06:57

上面代码我忘了添加A数组的过滤了:
所以这样数据会添加一倍,在我笔记本上当CPU运行大概14天.(当然我笔记本不可能这样连续运行的)

/*      if(A==1&&a1==1)
            return;
      if(A==1&&a3==0)
            return;
      if(A==0&&A==0){
            if((a1==1||a1==2)&&a3<2)
                return;
      }
*/

mathe 发表于 2010-1-15 12:21:01

还有如果我们不需要寻找所有解,但是希望能够尽量快速的得到比较多的解,
可以事先判断${RR-1}/{ln(MM)}$,这个数值约小,存在解的比例越高.
比如我将所有这个比列小于10的结果找出来,大概只需要半个小时,找到了77个解:












































































mathe 发表于 2010-1-15 12:27:20

前面使用那个比值不超过10,可以得出77个结果(总共搜索了300多行数据),现在再次使用比值不超过100,总共搜索了4000多行数据),但是总共只有93个(包含前面的77行).
所以估计s(8)应该是100多一点了:




























































































数学星空 发表于 2010-1-15 13:10:41

上面只给出了第一问的部份解哟...
在我笔记本上当CPU运行大概14天
是指第二问题s(n)的解吧?
第一问的s(n)已经算出来了吗?

mathe 发表于 2010-1-15 13:13:34

现在均是指第一问.
第二问的话更加简单

mathe 发表于 2010-1-15 13:32:40

如果要求全部是素数,前面6个数的组合只有420994个,大概只有前面1/8的运算量.
当然如果问题1的解全部出来了,我们只要再简单判断一下是否所有8个数都是素数,就得到问题2的解了.
我们还是等果树问题20行计算完以后,我在我的台式机上安装一下Pari/Gp,然后并行运行一段较长时间就可以解决这个问题了

mathe 发表于 2010-1-15 13:40:33

增加分布处理功能,
对于不同的人,只要修改参数BEGIN(),END(),OUTFILENAME()
就可以了
N()=
{
8
}

K()=
{
    N()-2
}

BEGIN()=
{
    1000
}

END()=
{
    1100
}

OUTFILENAME()=
{
    "c:\\out_t.txt"
}

output()=
{
    local(V,MM,RR,uu,f,v,a,b);
    MM=M;
    RR=R;
    V=MM*MM+RR;
    c=c+1;
    if(c>=BEGIN()&&c<=END(),
          f=divisors(V);
          for(u=1,length(f),
                v=f;
                if(v*v>V, next());
                if((v+MM)%RR==0,
                   a=(v+MM)/RR;
                   b=(V/v+MM)/RR;
                   if(a>n,
                       n=a;
                       n=b;
                       write(OUTFILENAME(),n)
                   )
                )
          )
    );
    if(c%100==0, print("process " c " lines"))
}

output1()=
{
    local(a0,a1,a2,a3);
    a0=A;a1=A%4;a2=A;a3=A%4;
    if(!(a2==1&&a1==1)&&
       !(a0==1&&a3==0)&&
      !(a0==0&&a2==0&&(a1==1||a1==2)&&a3<2),
      output()
    )
}
search(level)=
{
    local(ll,uu);
    if(level>=K(),
       output1(),
       ll=ceil(M/R);
       uu=floor((N()-level)*M/R);
       if(ll<=n,ll=n+1);
       for(i=ll,uu,
          if(gcd(M,i)!=1, next());
          n=i;
          M=M*i;
          R=R*i-M;
          A=A+1;
          search(level+1);
          A=A-1
       )
    )
}

search0()=
{
   n=vector(N());
   M=vector(N());
   R=vector(N());
   A=vector(N());
   c=0;
   for(i=2,7,
      n=i;
      R=i-1;
      M=i;
      A=A+1;
      search(1);
      A=A-1;
   )
}
页: 1 2 3 4 5 6 [7] 8 9 10 11
查看完整版本: 关于单位分数的一些难题