扩展欧几里德(模板)

https://www.luogu.com.cn/problem/P1082

https://blog.youkuaiyun.com/zhjchengfeng5/article/details/7786595

https://blog.youkuaiyun.com/zero_from/article/details/52984044

https://blog.youkuaiyun.com/weixin_44203780/article/details/88873296

https://blog.youkuaiyun.com/destiny1507/article/details/81750874

洛谷 p1082题解 学委

参考自以上链接(相当于是这些文章的拼凑。。。)

同余方程

ax ≡ b (mod n) 即ax和b除以n的余数相同 (ax%n==b%n)

ax≡b (mod n)   

ax=b+n*y

ax-n*y=b

 

换一种写法为 ax + by = c (正负号不重要)

c%gcd(a,b)==0时,ax + by = c有解。

  x=x0+b/gcd(a,b)*k       y=y0+a/gcd(a,b)*k

  所以只要求出一个特解,就能够求出剩余的解;

ax+by = z,z为gcd(a,b)若干倍,所以我们先求解ax+by = gcd(a,b),再将求出的解乘以 z/gcd(a,b)就好了。

 

一个重大遗留:我们将要求出来的 x,y 仅仅保证满足 ax+by=1,而 x 不一定是最小正整数解。有可能太大,也有可能是负数。x 批量地减去或加上 b,能保证 ax+by=1:

ax + by = 1

ax + by + k×ba - k×ba = 1

a(x+kb)+(y−ka)b=1

显然这并不会把方程中任何整数变成非整数。

2.“加上或减去 bb”不会使 xx 错过任何解。可以这么理解:

因此到最后,如果 x 太小就不断加 b 直到大于等于 0,太大则一直减 b,直到最小正整数解。

直接求模实现更快 x = (x % b + b) % b;

a>b
int exgcd(int a,int b,int &x,int &y){//扩展欧几里得算法
    if(b==0){
        x=1;y=0;
        return a;  //到达递归边界开始向上一层返回
    }
    int g=exgcd(b,a%b,x,y);
    int x1 = y,y1 = x-a/b*y;
    x = x1;
    y = y1;
    return g;     //得到a b的最大公因数
}

https://vjudge.net/problem/Gym-101512I

#include <bits/stdc++.h>
//#include <iostream>
//#include <cstring>
//#include <string>
//#include <algorithm>
//#include <cmath>
//#include <cstdio>
//#include <queue>
//#include <stack>
//#include <map>
#define pb push_back
#define mp make_pair
#define pi acos(-1.0)
#define ull unsigned long long
#define ll long long
#define sc(x) scanf("%d",&x)
#define fi(a, b) for(int i=a; i<=b; i++)
#define mem(a, b) memset(a, b, sizeof(a))
#define lowbit(x) (x&(-x))
#define mid (l + r) / 2
#define ls pos*2
#define rs pos*2+1
#define ios() ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//int gcd(int a,int b){
//    return b==0?a:gcd(b,a%b);
//}
const int maxn=1e2+50;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const ll mod = 1e9 + 9;
using namespace std;
//struct node{
//    int hp, dps;
//    double rk;
//}s[30];
//bool cmp(node a, node b){
//    return a.rk>b.rk;
//}
//vector<int>dp[maxn];
//set<int>p;
//map<string ,int>ma;
ll f[50], e[50];
ll exgcd(ll a,ll b,ll &x,ll &y){
    if(b==0){
        x=1;y=0;
        return a;
    }
    ll g=exgcd(b,a%b,x,y);
    ll x1 = y,y1 = x-a/b*y;
    x = x1;
    y = y1;
    return g;
}
int main(){
    ios();
//    int n, m, k, T;
    ll n; int T;
    e[0]=1;e[1]=0;
    f[0]=0;f[1]=1;
    for(int i=2; i<50; i++){
        f[i]=f[i-1]+f[i-2];
        e[i]=e[i-1]+e[i-2];
    }
    cin>>T;
    ll x, y;
    while(T--){
        cin>>n;
        for(int i=49; i>=2; i--){
            ll a=e[i], b=f[i];
            if(n%__gcd(a,b)==0){
                ll g = exgcd(e[i],f[i],x,y);
                x*=(n/g);y*=(n/g);
                缩小x,y;
                

                方法1:
                if(x>y){
                    ll k=(x-y)/(a+b);
                    if(x-k*b>y+k*a)k++;
                    x-=k*b; y+=k*a;
                }
                else{
                    ll k=(y-x)/(a+b);
                    if(x+k*b>y-k*a)k--;
                    x+=k*b; y-=k*a;
                }
                


                方法2:
                ll k=(x-y)/(a+b);
                x-=k*b; y+=k*a;
                if(x>y)x-=b,y+=a;



                if(x<=0)continue;
                cout<<x<<" "<<y<<endl;
                break;
            }
        }

    }
    return 0;
}

 

数据集介绍:野生动物与家畜多目标检测数据集 数据集名称:野生动物与家畜多目标检测数据集 数据规模: - 训练集:1,540张图片 - 验证集:377张图片 - 测试集:316张图片 分类类别: Brown-bear(棕熊)、Chicken(鸡)、Fox(狐狸)、Hedgehog(刺猬)、Horse(马)、Mouse(老鼠)、Sheep(绵羊)、Snake(蛇)、Turtle(龟)、Rabbit(兔)及通用object(物体)共11个类别 标注格式: YOLO格式标注,包含归一化坐标与类别索引,支持目标检测模型训练 数据特性: 涵盖航拍与地面视角,包含动物个体及群体场景,适用于复杂环境下的多目标识别 农业智能化管理: 通过检测家畜(鸡/马/绵羊等)数量及活动状态,辅助畜牧场自动化管理 生态监测系统: 支持野生动物(棕熊/狐狸/刺猬等)识别与追踪,用于自然保护区生物多样性研究 智能安防应用: 检测农场周边危险动物(蛇/狐狸),构建入侵预警系统 动物行为研究: 提供多物种共存场景数据,支持动物群体交互行为分析 高实用性标注体系: - 精细标注包含动物完整轮廓的边界框 - 特别区分野生动物与家畜类别,支持跨场景迁移学习 多维度覆盖: - 包含昼间/复杂背景/遮挡场景 - 涵盖陆地常见中小型动物与禽类 - 提供通用object类别适配扩展需求 工程适配性强: - 原生YOLO格式适配主流检测框架(YOLOv5/v7/v8等) - 验证集与测试集比例科学,支持可靠模型评估 生态价值突出: - 同步覆盖濒危物种(龟类)与常见物种 - 支持生物多样性保护与农业生产的双重应用场景
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值