找回密码
 欢迎注册
查看: 25195|回复: 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-4-20 04:58 , Processed in 0.054740 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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