找回密码
 欢迎注册
查看: 37493|回复: 35

[擂台] 搜寻互质点中的空白

[复制链接]
发表于 2009-11-23 23:36:17 | 显示全部楼层 |阅读模式

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

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

×
在趣题妙解板块《由互质点织成的一块布》一贴中的第二问,mathe给出了漂亮的结论以及巧妙的构造: http://bbs.emath.ac.cn/thread-1946-2-1.html 为此特意摆设一个编程擂台,对于n=2、n=3、n=4的情况,找对应的(x,y),使得整数对 (x,y),(x+1,y),...,(x+n-1,y) (x,y+1),(x+1,y+1),...,(x+n-1,y+1) ............ (x,y+n-1),(x+1,y+n-1),...,(x+n-1,y+n-1) 均不互质。 在满足上面的条件的前提下,(x+y)的值越小越好。 看看对于n=2、n=3、n=4的情况,找出来的整数对到底有多大。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-11-24 00:47:09 | 显示全部楼层
N=2: (14,20)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-11-24 00:52:49 | 显示全部楼层
N=3: (1274 ,1308)

评分

参与人数 1鲜花 +1 收起 理由
KeyTo9_Fans + 1 太棒了!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-11-26 16:43:30 | 显示全部楼层
这个问题的计算很费时啊,有谁能给出N=4,5,6,7,8,9,10 的值呢?? 可能需要借助数论知识来编程,缩短运算时间,有谁能给出答案及程序???
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-11-26 17:02:18 | 显示全部楼层
N=4我们可以试着搜索公因子模式如下的结构,其中?用互素而且不小于5的素数。 6 ? 2 3 ? ? ? ? 2 ? 2 ? 3 ? ? 3
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-11-26 18:06:09 | 显示全部楼层
Found x=2038235252988,y=2891651852154 Found x=721235275761,y=383376261639 Found x=329601462366,y=322399219389 Found x=8197745490,y=507009915048 Found x=8197745490,y=41984229963 Found x=3333736029,y=394313397 Found x=1668280158,y=642103992 Found x=939158010,y=770462691
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-11-26 18:06:39 | 显示全部楼层
  1. // gcds.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #include <algorithm>
  5. #include <assert.h>
  6. using namespace std;
  7. #define ASSERT(x) assert(x)
  8. int primes[]={5,7,11,13,19,23,29,31,37,41,43};
  9. int cand[9];
  10. int buf[4][4];
  11. long long minr=-1;
  12. long long mx, my;
  13. long long gcd(long long x, long long y)
  14. {
  15. if(y==0)return x;
  16. do{
  17. long long r=x%y;
  18. x=y;y=r;
  19. }while(y!=0);
  20. return x;
  21. }
  22. long long extGCD(long long a, long long b, long long & ar, long long & br)
  23. {
  24. long long x = 0, y = 1;
  25. long long old_a=a,old_b=b;
  26. ar = 1, br = 0;
  27. unsigned long long t, q;
  28. while (b != 0)
  29. {
  30. t = b; q = a / b; b = a % b; a = t;
  31. t = x; x = ar - q * x; ar = t;
  32. t = y; y = br - q * y; br = t;
  33. }
  34. if(ar<0)ar+=old_b;
  35. if(br<0)br+=old_a;
  36. return (a);
  37. }
  38. long long lcm(long long x, long long y)
  39. {
  40. return x/gcd(x,y)*y;
  41. }
  42. long long chinese(long long c[4])
  43. {
  44. long long s,t;
  45. long long d1=extGCD(c[0],c[1],s,t);
  46. ASSERT(d1==1);
  47. if(s!=0)s=c[1]-s;
  48. long long m1=c[0]*c[1];
  49. long long r1=c[0]*s;
  50. d1=extGCD(c[2],c[3],s,t);
  51. ASSERT(d1==1);
  52. long long a,b;
  53. a=((c[3]-3)*s)%c[3];
  54. b=((c[2]-2)*t)%c[2];
  55. long long m2=c[2]*c[3];
  56. long long r2=(a*c[2]+b*c[3])%m2;
  57. d1=extGCD(m1,m2,s,t);
  58. ASSERT((r2-r1)%d1==0);
  59. b=(r1*t)%m1;
  60. a=(r2*s)%m2;
  61. long long d2=gcd(d1,r1);
  62. m1/=d1;
  63. m2/=d2;
  64. d1/=d2;
  65. r1%=m1;r2%=m2;
  66. d1=extGCD(m1,m2,s,t);
  67. ASSERT(d1==1);
  68. a=(r1*t)%m1;
  69. b=(r2*s)%m2;
  70. long long r3=(a*m2+b*m1)%(m1*m2);
  71. return lcm(r3,d2);
  72. }
  73. void test_buf()
  74. {
  75. long long c[4];
  76. int i;
  77. for(i=0;i<4;i++){
  78. long long l1=lcm(buf[i][0],buf[i][1]);
  79. long long l2=lcm(buf[i][2],buf[i][3]);
  80. c[i]=lcm(l1,l2);
  81. }
  82. long long x=chinese(c);
  83. for(i=0;i<4;i++){
  84. long long l1=lcm(buf[0][i],buf[1][i]);
  85. long long l2=lcm(buf[2][i],buf[3][i]);
  86. c[i]=lcm(l1,l2);
  87. }
  88. long long y=chinese(c);
  89. if(minr<0||minr>x+y){
  90. minr=x+y;
  91. mx=x;
  92. my=y;
  93. printf("Found x=%lld,y=%lld\n",mx,my);
  94. }
  95. }
  96. int _tmain(int argc, _TCHAR* argv[])
  97. {
  98. int i,j,k,t;
  99. for(i=0;i<11;i++)for(j=i+1;j<11;j++){
  100. for(k=0,t=0;k<11;k++){
  101. if(k!=i&&k!=j){
  102. cand[t++]=primes[k];
  103. }
  104. }
  105. do{
  106. buf[0][0]=6;buf[0][1]=cand[0];buf[0][2]=2;buf[0][3]=3;
  107. buf[1][0]=cand[1];buf[1][1]=cand[2];buf[1][2]=cand[3];buf[1][3]=cand[4];
  108. buf[2][0]=2;buf[2][1]=cand[5];buf[2][2]=2;buf[2][3]=cand[6];
  109. buf[3][0]=3;buf[3][1]=cand[7];buf[3][2]=cand[8];buf[3][3]=3;
  110. test_buf();
  111. buf[0][0]=3;buf[0][1]=2;buf[0][2]=cand[0];buf[0][3]=6;
  112. buf[1][0]=cand[1];buf[1][1]=cand[2];buf[1][2]=cand[3];buf[1][3]=cand[4];
  113. buf[2][0]=cand[5];buf[2][1]=2;buf[2][2]=cand[6];buf[2][3]=2;
  114. buf[3][0]=3;buf[3][1]=cand[7];buf[3][2]=cand[8];buf[3][3]=3;
  115. test_buf();
  116. buf[0][0]=3;buf[0][1]=cand[0];buf[0][2]=cand[1];buf[0][3]=3;
  117. buf[1][0]=cand[2];buf[1][1]=2;buf[1][2]=cand[3];buf[1][3]=2;
  118. buf[2][0]=cand[4];buf[2][1]=cand[5];buf[2][2]=cand[6];buf[2][3]=cand[7];
  119. buf[3][0]=3;buf[3][1]=2;buf[3][2]=cand[8];buf[3][3]=6;
  120. test_buf();
  121. buf[0][0]=3;buf[0][1]=cand[0];buf[0][2]=cand[1];buf[0][3]=3;
  122. buf[1][0]=2;buf[1][1]=cand[2];buf[1][2]=2;buf[1][3]=cand[3];
  123. buf[2][0]=cand[5];buf[2][1]=cand[4];buf[2][2]=cand[6];buf[2][3]=cand[7];
  124. buf[3][0]=6;buf[3][1]=cand[8];buf[3][2]=2;buf[3][3]=3;
  125. test_buf();
  126. }while(next_permutation(cand,cand+9));
  127. }
  128. return 0;
  129. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-11-26 18:07:07 | 显示全部楼层
上面的程序我还没有运行完毕,谁来运行一下看看?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-11-26 18:36:04 | 显示全部楼层
请问:mathe 需要下载什么程序可以运行你写的程序呢? 因为我用的是matlabR2009
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-11-26 18:40:28 | 显示全部楼层
一个更优的解:x=726156780,y=68838054
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-11-21 17:00 , Processed in 0.027597 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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