分式运算模板

ll gcd(ll a,ll b)
{
    if(b==0)
    {
        return a;
    }else
    {
        return gcd(b,a%b);
    }

}
ll ABS(ll x) {
    return x<0 ? -x : x;
}
struct F {
    ll num,den;// fenzi -> num  fenmu-> den
    F(ll num=0,ll den=1) {
        if(den<0) num=-num,den=-den;
        ll g = gcd(ABS(num),den);
        this->num = num/g;
        this->den = den/g;
    }
    F operator+(const F &o)const {
        return F(num*o.den + den*o.num, den*o.den);
    }
    F operator*(const F &o)const {
        return F(num*o.num , den*o.den);
    }
    F operator/(const F &o) const {
        return F(num*o.den,den*o.num);
    }
};

原文地址:https://www.cnblogs.com/qieqiemin/p/10290212.html

时间: 2024-10-07 14:33:33

分式运算模板的相关文章

大数运算模板

大整数加法 /* 大整数加法 调用方式:add(a, b); 返回类型:string */ string add(string a, string b) { string s; reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); int i = 0; int m, k = 0; while(a[i] && b[i]) { m = a[i] - '0' + b[i] - '0' + k; k = m / 10; s += (m

大整数运算模板总结

大整数运算模板总结. 大整数结构体表示 整型数组从低位到高位顺序存储每一位数字,另外需要存储数字的长度. struct bign { int d[1000]; int len; bign(){ memset(d, 0, sizeof(d)); len = 0; } }; 大整数输入 一般通过字符串输入. bign Change(string str)//输入字符串转大整数 { bign a; a.len = str.length(); for (int i = 0; i < a.len; i++

快速幂运算模板

ll pow(ll a,ll b) //long long型 { ll ans=1; while(b!=0) { if(b%2==1) //if(b&1) ans=ans*a%mod;//如果是奇数次幂,因为b下面是除以2操作,会少一次乘,这里要提前乘上去. a=a*a%mod;//快速幂,每一次是上一次的平方倍 b=b/2; } return ans; } 分析: 将指数b看成二进制,b%2==1即判断当前b二进制最低位是否为1,是则将当前底数a与累积ans相乘,否则跳过.在每次循环中都将底数

快速运算模板(未完待续)

快速运算题目(持续更新) \(1.\) \(Raising\) \(Modulo\) \(Numbers\) 快速幂 细节:注意返回答案前取模. $View$ $Code$ inline long long readl() { long long ret=0,f=1; char ch=getchar(); while(ch>'9'||ch='0'&&ch>=1; } return ans%mod; } long long a,b,p; int main() { a=readl(

大数运算模板(高精度)

/*大数加法*/ # include<stdio.h> # include<string.h> # include<malloc.h> void add(char* a,char* b,char* c) { int i,j,k,max,min,n,temp; char *s,*pmax,*pmin; max=strlen(a); min=strlen(b); if (max<min) { temp=max; max=min; min=temp; pmax=b; p

双目运算模板

#include <bits/stdc++.h> using namespace std; const int maxn=1e5+10; int n,m,k,t; int ret[maxn]; char a[maxn],b[maxn],c[maxn]; void gao() { int top1=0,top2=0; for(int i=0;a[i];i++) { if(a[i]==' ')continue; if(a[i]=='(')c[++top2]=a[i]; else if(a[i]==

MathType二次偏导怎么表示

求导以及求偏导运算在数学中是很重要的一个部分,尤其是在高等数学中,基本都由函数的导数与偏导组成,很多公式定理也是关于这方面的,如果少了这一部分,数学将会黯然失色.因此在文档中涉及到这些内容时,必然会少不了偏导求导符号的出现,那么编辑公式时,MathType二次偏导怎么表示? 具体操作过程如下: 1.打开MathType公式编辑器这个软件,进入到公式编辑状态,打开方式有很多种,可以根据自己的习惯来打开,对于编辑公式没有影响.  打开软件进入编辑状态 2.由于求偏导是属于分数形式,所以首先要使用分数

《算法竞赛入门经典第二版》 P35 习题2-4 子序列的和(subsequence)

/* <算法竞赛入门经典第二版> P35 习题2-4: 输入两个正整数 n < m < 10^6,输出 (1/n)^2 + 1/(n+1)^2 +……+ 1/m^2,保留5位小数. 输入包含多组数据,结束标志为 m=n=0. 有错欢迎指出^_^ */ #include<stdio.h> int main() { int m,n,i,j=1; while(scanf("%d%d",&m,&n) != EOF) { double sum

练习一四则运算3.0

1 //20150324 练习1 2 import java.util.*; 3 import java.util.regex.Pattern; 4 import java.math.RoundingMode; 5 import java.text.*; 6 import java.math.*; 7 public class Exercuise { 8 static double a,b,a1,b1; 9 static char[]ch={'+','-','*','/'}; 10 11 sta