找回密码
 欢迎注册
楼主: 数学星空

[讨论] 关于单位分数的一些难题

[复制链接]
发表于 2010-1-13 16:06:07 | 显示全部楼层
采用25#附件中给出的算法,让N=8,k=6
对于序列$n_1,n_2,...,n_8$,定义$R_0=1,R_1=n_1-1,R_t=n_tR_{t-1}-\prod_{i=1}^{t-1}n_i$
对于候选序列$n_1,n_2,...,n_k$,我们需要判断
$(\prod_{i=1}^kn_i)^2+R_k$是否有关于$R_k$和$-\prod_{i=1}^kn_i$同余的因子
由此在${\prod_{i=1}^k n_i}/{R_k}$不是太大的情况(比如小于1000),我们可以穷举所有这样可能的因子.
但是如果合格比例比较大的时候,可能采用因子分解$(\prod_{i=1}^kn_i)^2+R_k$的方法比较.
不过我们可以用C语言写一个程序,将比例比较小的情况全部处理,然后余下的部分输出到一个文件,在用其它工具对这些数据进行因子分解,然后继续处理.
当然文章里面还有一个重要的筛选条件是对于任意$1<=t<=k$,
${\prod_{i=1}^tn_i}/{R_t}<n_{t+1}<(N-t){\prod_{i=1}^tn_i}/{R_t}$
谁有空可以先将这部分功能实现一下,然后根据处理结果我们就可以看出到底还有多少工具量遗留.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-14 09:23:03 | 显示全部楼层
注意到,搜索过程中能搜到最后一层的几乎都会产生解。
是否可以由这个来提前剪枝?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-1-14 09:28:56 | 显示全部楼层
以下附件对于mathe研究计算s(8) 可能会有帮助...
S0025-5718-99-01088-1.pdf (269.38 KB, 下载次数: 2)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-1-14 09:46:53 | 显示全部楼层
下面附件是有关如何计算单位分数的一些算法研究及计算程序...
或许对编程有所帮助
EgyptianFractions.pdf (130.49 KB, 下载次数: 1)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-14 11:55:53 | 显示全部楼层
注意到,搜索过程中能搜到最后一层的几乎都会产生解。
是否可以由这个来提前剪枝?
medie2005 发表于 2010-1-14 09:23

什么叫搜索到最后一层,直接搜索到8层吗?

我现在写了个程序,统计了对s(8)搜索到6层产生的数据分布情况
发现计算出来的$\prod_{i=1}^6n_i$没有超过14位数的,这是一个很好的信息.
也就是说$(\prod_{i=1}^6n_i)^2+R_6$不会超过28位数.
也就是我们需要一个能够对不超过28位数进行确定性素性判断和因子分解的程序.
而搜索到6层产生的所有候选解只有3382746个,不算太大.
但是其中${\prod_{i=1}^6n_i}/{R_6}$通常都比较大,主要分布在7位数,所以如果如25#论文采用试初法的确效率不高,而采用因子分解的方法应该更加有效
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-14 11:56:43 | 显示全部楼层
统计前6层的代码,大家看看有没有错误,完全按照那个论文上的算法写的

  1. #include "stdafx.h"
  2. #include <math.h>
  3. #define L 40
  4. #define N 8
  5. #define K 6
  6. unsigned n[K];
  7. unsigned long long M[K];
  8. unsigned long long R[K];
  9. unsigned long long maxM;
  10. int A[4];
  11. long long count[K];
  12. long long gc[L];
  13. void output(int level, int overflow)
  14. {
  15.     if(level==K){
  16.         int a3=A[3]%4;
  17.         int a1=A[1]%4;
  18.         if(A[2]==1&&a1==1)
  19.             return;
  20.         if(A[0]==1&&a3==0)
  21.             return;
  22.         if(A[0]==0&&A[2]==0){
  23.             if((a1==1||a1==2)&&a3<2)
  24.                 return;
  25.         }
  26.         int c=(int)ceil(log10((double)(M[level-1])));
  27.         if(c>=L)c=L-1;
  28.         if(c<0)c=0;
  29.         gc[c]++;
  30.     }
  31.     if(M[level-1]>maxM)maxM=M[level-1];
  32.     count[level-1]++;
  33. }

  34. unsigned long long gcd(unsigned long long x,unsigned long long y)
  35. {
  36.     while(y!=0){
  37.         unsigned long long r=x%y;
  38.         x=y;
  39.         y=r;
  40.     }
  41.     return x;
  42. }

  43. void search(int level)
  44. {
  45.     if(level>=K){
  46.         output(level,0);
  47.         return;
  48.     }
  49.     double ll=(double)M[level-1]/R[level-1];
  50.     double uu=ll*(N-level);
  51.     if(uu>=4294967295.5||uu>=18446744073709551615.0/M[level-1]){///overflow
  52.         output(level,1);
  53.         return;
  54.     }
  55.     unsigned li=(unsigned)ceil(ll);
  56.     unsigned ui=(unsigned)uu;
  57.     if(li<=n[level-1])li=n[level-1]+1;
  58.     unsigned i;
  59.     for(i=li;i<=ui;i++){
  60.         if(gcd(M[level-1],i)!=1)
  61.             continue;
  62.         n[level]=i;
  63.         M[level]=M[level-1]*i;
  64.         R[level]=R[level-1]*i-M[level-1];
  65.         A[i%4]++;
  66.         search(level+1);
  67.         A[i%4]--;
  68.     }
  69. }

  70. void search0()
  71. {
  72.     int i;
  73.     for(i=0;i<4;i++)A[i]=0;
  74.     for(i=2;i<=7;i++){
  75.         n[0]=i;
  76.         R[0]=i-1;
  77.         M[0]=i;
  78.         A[i%4]++;
  79.         search(1);
  80.         A[i%4]--;
  81.     }
  82. }

  83. int _tmain(int argc, _TCHAR* argv[])
  84. {
  85.     search0();
  86.     int i;
  87.     for(i=0;i<K;i++){
  88.         printf("count[%d]=%lld\n",i+1,count[i]);
  89.     }
  90.     for(i=0;i<L;i++)
  91.     printf("gc[%d]=%lld\n",i,gc[i]);
  92.     printf("maxM=%llud\n",maxM);
  93.         return 0;
  94. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-14 12:19:13 | 显示全部楼层
什么叫搜索到最后一层,直接搜索到8层吗?
==============================
我是指搜索到第6层。后两个解不定方程就可以(看s(7)的结果,要解的方程是很少的)。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-14 12:20:09 | 显示全部楼层
那可以s(8)的情况不同,我上面估计出来还有
3382746
个候选的情况
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-14 12:21:45 | 显示全部楼层
你是如何过滤的,我试了一下,s(7)情况余下1378个方程,好像解远远没有这么多
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-14 12:31:32 | 显示全部楼层
本帖最后由 medie2005 于 2010-1-14 12:33 编辑

呵呵,我是猜测的,没实际算过。最后的不定方程有解的可能性比较大。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-4-19 18:00 , Processed in 0.073864 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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