找回密码
 欢迎注册
查看: 236|回复: 2

[求助] 挑战R509分解

[复制链接]
发表于 2025-5-4 13:08:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
有一个网站https://stdkmd.net/nrr/repunit/
专门研究了:分解c=(10^n-1)/9,这里的n限制为质数.我对其中的部分分解类型感兴趣.这类数中有一个极小类型,太难以分解,通常只能分解成两个因子x和y.举例:n=5,c是5位数,因子规律:x值(2位)+y值(3位)=5(n值),x值具有2*n*k+1=2*5*4+1=41的形式,y值具有2*n*m+1=2*5*27+1=271的形式,c=(10^5-1)/9=41*271.
n=7,c是7位数,因子规律:x值(3位)+y值(4位)=7(n值),x值具有2*n*k+1=2*7*17+1=239的形式,y值具有2*n*m+1=2*7*332+1=4649的形式.c=(10^7-1)/9=239*4649.
n=11时规律相同.
今天要挑战的难题是:c=(10^509-1)/9,这个数经严格判定为合数,经过长时间分解,没有找到任何因子,我猜属于只有两个因子的情形,x值254位,y值255位.你们帮忙分析一下,有没有更好的补充条件,最终分解这个大数
经过部分数据观察:x值大于sqrt(10^((n-1)/2) +1)
单n=5时,(5-1)/2+1=3,此时sqrt(10^3)=31.6, 41大于31.6
单n=7时,(7-1)/2+1=4,此时sqrt(10^4)=99.99, 239大于99.99
单n=11时,(11-1)/2+1=6,此时sqrt(10^6)=999.99, 21649大于1千
...
不知以后的数是不是成立,若是成立这是一个限制条件
单n=509时,(509-1)/2+1=255,x值大于sqrt(10^255)=3.16227766016837933199889354443270*10^127,这是涵盖其它类型的分解,这不是我想要的,x值应该直接大于10^254
看了n=17,n=71,n=211以后我又有点泄气了,好像以后没有再也没有x值254位,y值255位这种类型出现了,找不到它的限制条件了
ai给的分解建议:
椭圆曲线对我来说要求太高...


509.PNG
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2025-6-18 20:52:57 | 显示全部楼层
经过一个多月的分析,观察,对R(509)的分解方法有进一步的缩小范围.
R(509)的因子必须具有1018k+1的形式.
因子的倒数的循环节长度为509,长度值是一个固定的素数值.
k不等于3a,虽说1018*3a+1产生素数,但是产生的素数的倒数的循环节长度值是合数,且大部分循环节值被3整除,不能被3整除的循环节长度都是偶数.
1018*(3a+2)+1不产生素数,永远被3整除.
k值只能是3a+1,且3a+1的末尾数数字不能含有3和8,若含有3和8,则1018*(3a+1)+1必被5整除.
进一步1018*(3a+1)+1必须是素数.
100个k值里面计算28个.
计算量为总k值的28%,72%的k值不需要计算.
猜测因子值大于3.1622776601683793319988935444327185337195551393252168268575048530*10^127,
即k值大于3.1063631239375042554016635996392127050290325533646530715692582050*10^124,这个计算量仍然不可接受,无法有大的进展.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 4 天前 | 显示全部楼层
写了个随机数,然后用这个随机数验证1018*k+1是不是素数,如果是,进一步验证是不是R(509)的因子,希望碰碰运气.找到因子的概率是10^(-120),太低.
每次运行1000个素数验证的时间是200秒.
  1. restart;
  2. with(RandomTools):
  3. with(numtheory):
  4. with(FileTools):

  5. # ===== 全局配置 =====
  6. # R(509) 定义
  7. R509 := (10^509 - 1)/9:

  8. # 精度设置
  9. Digits := 600;

  10. # 计算关键边界值函数
  11. calcBoundary := proc(root)
  12.     local value;
  13.     value := evalf(R509^(1/root));
  14.     # 精确到小数点后1位并向上取整
  15.     return ceil(value * 10) / 10;
  16. end proc:

  17. # 预先计算边界值
  18. lower_small := calcBoundary(4);   # R509^(1/4)
  19. upper_small := calcBoundary(3);   # R509^(1/3)
  20. lower_large := upper_small;       # R509^(1/3)
  21. upper_large := calcBoundary(2);   # R509^(1/2)

  22. printf("小段数区间: %.1e 到 %.1e\n", lower_small, upper_small);
  23. printf("大段数区间: %.1e 到 %.1e\n", lower_large, upper_large);

  24. # 保存边界值到文件
  25. save lower_small, upper_small, lower_large, upper_large, "R509_boundaries.m";

  26. # ===== 搜索函数 =====
  27. searchFactors := proc(lower_bound, upper_bound, target_primes)
  28.     local primes_found, k, p, attempts, k_lower, k_upper, start_time;
  29.     primes_found := [];
  30.     attempts := 0;
  31.     start_time := time();
  32.    
  33.     # 计算k的范围
  34.     k_lower := ceil((lower_bound-1)/1018);
  35.     k_upper := floor((upper_bound-1)/1018);
  36.    
  37.     printf("搜索范围: k = %a 到 %a (约%.3e个可能值)\n",
  38.            k_lower, k_upper, k_upper - k_lower + 1);
  39.    
  40.     # 生成候选k值直到找到目标素数数量
  41.     while nops(primes_found) < target_primes and attempts < 10^7 do
  42.         # 在范围内生成随机k值
  43.         k := Generate(integer(range = k_lower..k_upper));
  44.         
  45.         # 添加约束条件
  46.         # 约束1: k必须是3a+1形式
  47.         if k mod 3 <> 1 then
  48.             attempts := attempts + 1;
  49.             next;
  50.         end if;
  51.         
  52.         # 约束2: k的末位数字不能是3或8
  53.         if (k mod 10 = 3) or (k mod 10 = 8) then
  54.             attempts := attempts + 1;
  55.             next;
  56.         end if;
  57.         
  58.         # 约束3: a不能是7k+5形式 (a = (k-1)/3)
  59.         if ((k-1)/3) mod 7 = 5 then
  60.             attempts := attempts + 1;
  61.             next;
  62.         end if;
  63.         
  64.         # 计算候选因子 p = 1018*k + 1
  65.         p := 1018*k + 1;
  66.         
  67.         # 检查p是否为素数
  68.         if isprime(p) then
  69.             # 添加到素数列表
  70.             primes_found := [op(primes_found), p];
  71.             printf("发现候选素数: %.3e (k=%a)\n", p, k);
  72.         end if;
  73.         
  74.         attempts := attempts + 1;
  75.         
  76.         # 每10000次尝试显示进度
  77.         if attempts mod 10000 = 0 then
  78.             printf("尝试次数: %a, 找到素数: %d/%d\n",
  79.                    attempts, nops(primes_found), target_primes);
  80.         end if;
  81.     end do;
  82.    
  83.     printf("完成! 尝试次数: %a, 耗时: %.1f 秒\n",
  84.            attempts, time() - start_time);
  85.     return primes_found;
  86. end proc:

  87. # ===== 每日任务函数 =====
  88. dailySearch := proc()
  89.     local large_primes, small_primes, all_candidates, factor, i, found, q;
  90.     global day_count;
  91.     local start_time, total_time;
  92.    
  93.     start_time := time();
  94.    
  95.     # 初始化day_count
  96.     if not assigned(day_count) then
  97.         day_count := 0;
  98.     end if;
  99.    
  100.     day_count := day_count + 1;
  101.     printf("\n===== 第 %d 天搜索开始 =====\n", day_count);
  102.    
  103.     # 大段数区间搜索 (500个素数)
  104.     printf("\n-- 大段数区间搜索 (目标500个素数) --\n");
  105.     large_primes := searchFactors(lower_large, upper_large, 500);
  106.     printf("在大段数区间找到 %d 个候选素数\n", nops(large_primes));
  107.    
  108.     # 小段数区间搜索 (500个素数)
  109.     printf("\n-- 小段数区间搜索 (目标500个素数) --\n");
  110.     small_primes := searchFactors(lower_small, upper_small, 500);
  111.     printf("在小段数区间找到 %d 个候选素数\n", nops(small_primes));
  112.    
  113.     # 合并所有候选素数
  114.     all_candidates := [op(large_primes), op(small_primes)];
  115.     printf("\n总计候选素数: %d 个\n", nops(all_candidates));
  116.    
  117.     # 验证候选素数是否能整除R(509)
  118.     found := false;
  119.     printf("开始验证 %d 个候选因子...\n", nops(all_candidates));
  120.     for i from 1 to nops(all_candidates) do
  121.         factor := all_candidates[i];
  122.         
  123.         # 使用模幂运算验证整除性
  124.         if Power(10, 509) mod (9*factor) = 1 then
  125.             printf("成功! 发现因子: %a\n", factor);
  126.             # 计算并输出另一个因子
  127.             q := R509 / factor;
  128.             printf("对应因子: %a\n", q);
  129.             
  130.             # 保存结果到文件
  131.             save factor, q, "R509_factor_found.m";
  132.             found := true;
  133.             # 发现因子后可以继续或停止
  134.         end if;
  135.     end do;
  136.    
  137.     if not found then
  138.         printf("今日未发现有效因子\n");
  139.     end if;
  140.    
  141.     # 保存进度
  142.     save day_count, "R509_progress.m";
  143.    
  144.     total_time := time() - start_time;
  145.     printf("\n===== 第 %d 天搜索完成, 总耗时: %.1f 秒 =====\n", day_count, total_time);
  146. end proc:

  147. # ===== 加载进度 =====
  148. # 尝试加载之前的进度
  149. if FileTools:-Exists("R509_progress.m") then
  150.     read "R509_progress.m";
  151.     printf("检测到先前进度: 已执行 %d 天\n", day_count);
  152. end if;

  153. # ===== 执行每日搜索 =====
  154. dailySearch();

  155. # ===== 长期运行提示 =====
  156. printf("\n提示: 每天运行此脚本一次,持续一年。");
  157. printf("要明天继续搜索,请重新运行此脚本。\n");
复制代码

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

本版积分规则

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

GMT+8, 2025-6-26 20:47 , Processed in 0.024369 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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