呼啦啦呼啦啦

哟哟哟噗噗噗~~

【数学{枚举策略}】有理逼近

 
有理逼近  
     

 

 

 

 

描述 Description

 

 

对于一个素数P,我们可以用一系列有理分数(分子、分母都是不大于N的自然数)来逼近sqrt(p),例如P=2,N=5的时候:1/1<5/4<4/3<sqrt(2)<3/2<5/3<2/1。
任 务 :
给定P、N(N>sqrt(p)),求X、Y、U、V,使x/y<sqrt(p)<u/v且x/y与sqrt(p)之间、sqrt(p)与u/v之间都不能再插入满足题意的有理分数。

 

 

 

 

 

 

 

输入格式 Input Format

 

 

输入文件的第一行为P、N,其中 P、N<30000。

 

 

 

 

 

 

 

输出格式 Output Format

 

 

输出文件只有一行,格式为“X/Y U/V”。注意,答案必须是既约的,也就是说分子、分母的最大公约数必须等于1。

 

 

 

 

 

 

 

样例输入 Sample Input [复制数据]

 

 

样例1:2 5

样例2:5 100

 

 

 

 

 

 

 

样例输出 Sample Output [复制数据]

 

 

样例1:

4/3 3/2

样例2:

38/17 85/38

 

 

 

 

 

 

 

时间限制 Time Limitation

 

 

1S

=====================

经典的数学问题

--------------------

主要是为了减少枚举量

s1/m1<p^(0.5)<s2/m2

s1<m1*p^(0.5);s2>p^(0.5)*m2

--------------------------------------------

这样的话就可以将那些完全不可能的值排除了。

=================================

var
  n,p:longint;
  s1,m1,s2,m2:longint;
  a1,a2,a:extended;
procedure init;
begin
  assign(input,'ty1077.in');
  assign(output,'ty1077.out');
  reset(input); rewrite(output);
end;

procedure terminate;
begin
  close(input); close(output);
  halt;
end;

function pd(a,b:longint):longint;
begin
  if b=0 then pd:=a
  else pd:=pd(b,a mod b);
end;

procedure main;
var
  i,j,t:longint;
begin
  readln(p,n);
  a:=sqrt(p);
  a1:=maxlongint;
  a2:=0;
  for i:=1 to n do // 枚举分母
    begin
      t:=trunc(i*a);
      if t>n then continue;
      for j:=t to n do  //枚举分子
        if pd(j,i)=1 then
          begin
            if (j/i>a) and (j/i<a1) then
              begin
                s1:=j;
                m1:=i;
                a1:=j/i;
              end;
          end;
      for j:=1 to t do
        if pd(j,i)=1 then
          begin
            if (j/i<a)and(j/i>a2) then
              begin
                s2:=j;
                m2:=i;
                a2:=j/i;
            end;
          end;
    end;
  writeln(s2,'/',m2,' ',s1,'/',m1);
end;

begin
  init;
  main;
  terminate;
end.


 

阅读更多
文章标签: output input
想对作者说点什么? 我来说一句

TYVJ 1077 有理逼近

二分

Orion_Rigel Orion_Rigel

2016-10-13 22:44:54

阅读数:126

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭