有理数

连分数逼近

此生再无相见时 提交于 2019-12-19 09:41:48
在 数学 中, 连 分数 或 繁分数 即如下表达式: 这里的 a 0 是某个 整数 而所有其他的数 a n 都是正整数。可依样定义出更长的表达式。如果 部分分子 (partial numerator)和 部分分母 (partial denominator)允许假定任意的值,在某些上下文中可以包含 函数 ,则最终的表达式是 广义连分数 。在需要把上述标准形式与广义连分数相区别的时候,可称它为 简单 或 正规连分数 ,或称为是 规范形式 的。 连分数常用于无理数的逼近,例如: 由此得到 的 渐近分数 、 、 、 、…… 考虑实数 r 。设 i 是 r 的整数部分,而 f 是它的小数部分。则 r 的连分数表示是 [ i ; …],这里的“…”是 1/ f 的连分数表示。习惯上用分号取代 第一个 逗号。 要计算实数 r 的连分数表示,写下 r 的整数部分(技术上 floor )。从 r 减去这个整数部分。如果差为 0 则停止;否则找到这个差的倒数并重复。这个过程将终止,当且仅当 r 是有理数。 找出 3.245 的连分数 STOP 3.245 的连分数是 [3; 4, 12, 4] 数 3.245 还可以表示为连分数展开 [3; 4, 12, 3, 1];参见下面的有限连分数。 这个算法适合于实数,但如果用浮点数实现的话,可能导致数值灾难。作为替代,任何浮点数是一个精确的有理数

P2613 【模板】有理数取余

痞子三分冷 提交于 2019-12-03 07:44:34
P2613 【模板】有理数取余 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int p = 19260817; 5 inline ll read() { 6 ll res = 0; 7 char ch = getchar(); 8 while(!isdigit(ch) and ch != EOF) 9 ch = getchar(); 10 while(isdigit(ch)) { 11 res = (res << 3) + (res << 1) + (ch - '0'); 12 res %= p; 13 ch = getchar(); 14 } 15 return res; 16 } 17 void exgcd(ll a, ll b, ll &x, ll &y) { 18 if (b == 0) x = 1, y = 0; 19 else exgcd(b, a%b, y, x), y -= a/b * x; 20 } 21 int main() { 22 ll a = read(), b = read(); 23 if (b == 0) { 24 puts("Angry!"); 25 return 0; 26 } 27 ll x, y; 28 exgcd(b,p

P2613 【模板】有理数取余

匿名 (未验证) 提交于 2019-12-03 00:16:01
P2613 【模板】有理数取余 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int p = 19260817; 5 inline ll read() { 6 ll res = 0; 7 char ch = getchar(); 8 while(!isdigit(ch) and ch != EOF) 9 ch = getchar(); 10 while(isdigit(ch)) { 11 res = (res << 3) + (res << 1) + (ch - '0'); 12 res %= p; 13 ch = getchar(); 14 } 15 return res; 16 } 17 void exgcd(ll a, ll b, ll &x, ll &y) { 18 if (b == 0) x = 1, y = 0; 19 else exgcd(b, a%b, y, x), y -= a/b * x; 20 } 21 int main() { 22 ll a = read(), b = read(); 23 if (b == 0) { 24 puts("Angry!"); 25 return 0; 26 } 27 ll x, y; 28 exgcd(b,p

有理数

匿名 (未验证) 提交于 2019-12-03 00:09:02
public class Rational{ private long numerator=0;//分子 private long denominator=1;//分母 public Rational() { super(); } public Rational(long numerator, long denominator) { // TODO Auto-generated constructor stub long gcd=gcd(numerator,denominator); this.numerator=((denominator>0)?1:-1)*numerator/gcd; this.denominator=Math.abs(denominator)/gcd; } //求两个数最大公约数以便约分 private static long gcd(long n, long d) { // TODO Auto-generated method stub long n1=Math.abs(n); long n2=Math.abs(d); int gcd=1; for(int k=1;k<=n1&&k<=n2;k++){ if(n1%k==0&&n2%k==0) gcd=k; } return gcd; } //获得有理数的分子或者分母 public long

P2613 有理数取余

匿名 (未验证) 提交于 2019-12-02 23:47:01
题面:https://www.luogu.org/problemnew/show/P2613 分析题目,发现c可以转化为 a b 1,即本题就是求b在mod p的意义下的逆元。特别的,当 gcd(a,p)≠1gcd(a,p)≠1,方程无解,因此a也无逆元。 Code: #include <cstdio> #include <cstring> #include <iostream> using namespace std ; typedef long long LL ; #define int LL #define Mod 19260817 char st [ 10005 ]; int read () { scanf ( "%s" , st ); int len = strlen ( st ), num = 0 ; for ( int i = 0 ; i < len ; i ++) num =( num * 10 + st [ i ]- '0' )% Mod ; return num ; } int d , x , y ; void exgcd ( int a , int b , int & d , int & x , int & y ) { if ( b == 0 ) { d = a ; x = 1 ; y = 0 ; return ; } exgcd ( b , a % b ,

有理数加法-------Python实现

匿名 (未验证) 提交于 2019-12-02 22:56:40
本题要求编写程序,计算两个有理数的和。 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。 输出格式: 在一行中按照 a/b 的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。 输入样例1: 1/3 1/6 输出样例1: 1/2 输入样例2: 4/3 2/3 输出样例2: 2 s,q=input().split() n,m=s.split("/") o,p=q.split("/") n=int(n) m=int(m) o=int(o) p=int(p) if(m==p): n=(n+o) else: k=m m=m*p n=n*p+o*k for i in range(2,n): while(n%i==0 and m%i==0): n=n//i m=m//i if(m==1): s=n else: s=str(n)+"/"+str(m) print(s) 文章来源: 有理数加法-------Python实现

1034 有理数四则运算 (20 分)

◇◆丶佛笑我妖孽 提交于 2019-12-02 05:56:16
1034 有理数四则运算 (20 分) 本题要求编写程序,计算 2 个有理数的和、差、积、商。 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。 输出格式: 分别在 4 行中按照 有理数1 运算符 有理数2 = 结果 的格式顺序输出 2 个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式 k a/b ,其中 k 是整数部分, a/b 是最简分数部分;若为负数,则须加括号;若除法分母为 0,则输出 Inf 。题目保证正确的输出中没有超过整型范围的整数。 输入样例 1: 2/3 -4/2 输出样例 1: 2/3 + (-2) = (-1 1/3) 2/3 - (-2) = 2 2/3 2/3 * (-2) = (-1 1/3) 2/3 / (-2) = (-1/3) 输入样例 2: 5/3 0/6 输出样例 2: 1 2/3 + 0 = 1 2/3 1 2/3 - 0 = 1 2/3 1 2/3 * 0 = 0 1 2/3 / 0 = Inf #include <bits/stdc++.h> using namespace std; typedef long long ll; ll gcd(ll a,ll b) { return b==0?a:gcd(b

一个有理数集上的实数集函数

戏子无情 提交于 2019-12-01 12:02:17
一个定义在有理数集上的实数函数 f,对一切有理数x和y,都有 f(x+y)= f(x)+ f(y)。 证明:对有理数x有 f(x)= kx,其中k为实数。 ------------------------------------------------------------------------------- 令n为大于0的正整数,则 f(nx)= f(n-1 x)+f(x) f(n-1 x)= f(n-2 x)+f(x) ············ f(2x)= f(x)+f(x) ∴ f(nx)= n f(x) 这意味着,对任意一个x,将自变量区域0-x分为n(n为正整数)份并命名为x1、x2···xn,所有这些点对应的y在一条直线上并且过原点。 假设 对所有的有理数x都满足 f(x)= kx 不成立,即至少存在两点,这两点的连线不过原点,设这两点中较小的点为xa,较大的为xb,xa<xb, 由于xa xb都是有理数,所以xa/xb 是一个真分数,设xa/xb的分母为m,分子为n,将自变量0-xb分为m份,并命名为x1、x2···xm,所有这些点对应的y在一条直线上并且过原点。由于xn就是xa,所以xa对应的点与xb对应的点连线也过原点,与已知矛盾,所以假设不成立,所以对所有的有理数x有 f(x)= kx 成立,证毕。 来源: https://www.cnblogs.com

有理数

喜夏-厌秋 提交于 2019-11-30 02:21:56
public class Rational{ private long numerator=0;//分子 private long denominator=1;//分母 public Rational() { super(); } public Rational(long numerator, long denominator) { // TODO Auto-generated constructor stub long gcd=gcd(numerator,denominator); this.numerator=((denominator>0)?1:-1)*numerator/gcd; this.denominator=Math.abs(denominator)/gcd; } //求两个数最大公约数以便约分 private static long gcd(long n, long d) { // TODO Auto-generated method stub long n1=Math.abs(n); long n2=Math.abs(d); int gcd=1; for(int k=1;k<=n1&&k<=n2;k++){ if(n1%k==0&&n2%k==0) gcd=k; } return gcd; } //获得有理数的分子或者分母 public long