LightOJ::1077 -----奇妙的最大公约数

题目:http://www.lightoj.com/volume_showproblem.php?problem=1077

题意:在平面上, 给出两个点的坐标 例如:(x, y) 其中x, y 都是整数。 求: 以这两个点为端点的线段上一共有几个整数点(即:横纵坐标皆为整数)。

解法: 求出|x1 - x2| 和 |y1-y2| 的最大公约数 再加上1 即可!

是不是很奇妙, 不可思议的奇妙, 为何如此的巧合呢?

然而就是如此的巧合!!!。

提示: 把线段看做向量, 把一个端点移到原点。 式子中最后加那个 1 就是原点。

然后,,,,就比较难证啦, 自己画图观察吧。 呵呵呵!

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;

long long gcd(long long a, long long b)
{
    return b==0 ? a : gcd(b, a%b);
}

int main()
{
    int kase = 0;
    int T;
    cin>>T;
    while(T--)
    {
        long long x1, x2, y1, y2, a, b, ans = 0;
        cin>>x1>>y1>>x2>>y2;
        a=abs(x2-x1);
        b=abs(y2-y1);
        if(a==0) ans = b+1;
        else if(b==0) ans = a+1;
        else ans=gcd(a, b)+1;
        cout<<"Case "<<++kase<<": "<<ans<<endl;
    }
    return 0;
}
时间: 2024-10-15 11:28:44

LightOJ::1077 -----奇妙的最大公约数的相关文章

奇妙的算法【9】每个小孩的糖果数,找公约数,最少硬币数

1,每个小孩的糖果数量是多少 有p个小孩,c个糖果,刚开始第1个小孩发一个糖果,第2个小孩发两个糖果,第p个小孩发p个糖果,如果糖果没有发完,就接着[注意]第1个小孩发p+1个糖果.....第p个小孩发2*p个糖果,如果糖果还没有发完,就继续下一轮,第1个小孩发2*p+1个糖果,... 方法一,遍历[这种方法太low了就折叠一下] package com.cnblogs.mufasa.Main1; import java.util.Scanner; public class Main { pub

51nod 1179 最大的最大公约数

给出N个正整数,找出N个数两两之间最大公约数的最大值.例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5. Input 第1行:一个数N,表示输入正整数的数量.(2 <= N <= 50000) 第2 - N + 1行:每行1个数,对应输入的正整数.(1 <= S[i] <= 1000000) Output 输出两两之间最大公约数的最大值. Input示例 4 9 15 25 16 Output示例 5 思路:尝试了两种方法,两种

辗转相除法 求最大公约数和最小公倍数

# include<stdio.h> int main() { int a,b,c,x,y; printf("请输入两个正整数,用逗号间隔:"); scanf("%d,%d",&a,&b); x=a; y=b; if (a<b) { c=a; a=b; //要保证 a>b b=c; } while (b!=0) { c=a; a=b; b=c%b; } c=x*y/a; printf("最大公约数为%d,最小公倍数为

求2个数的最小公倍数和最大公约数

1 # -*- coding: UTF-8 -*- 2 3 def gongyueshu(m, n): 4 if n == 0: 5 return m 6 else: 7 return gongyueshu(n, m%n) 8 9 def gongbeishu(m, n): 10 gongyue = gongyueshu(m, n) 11 return (m * n) / gongyue 12 13 gong = gongyueshu(m=18, n=6) 14 print(gong) 15 g

LightOJ 1030 Discovering Gold【概率】

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1030 题意:基础概率题. 代码: #include <stdio.h> #include <string.h> #include <vector> #include <string> #include <algorithm> #include <iostream> #include <iterator>

LightOJ - 1370 Bi-shoe and Phi-shoe

题目链接:http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1370 题目大意:给N个数a[i], N <= 1e6,问使 Φ(x) >= a[i] 成立的最小x的所有x的和是多少. 解题思路:我们知道的是对于素数 m 来说,phi[m] = m - 1.另一方面,对于一个合数 m 来说, phi[m] < phi[x] , x > m && x 是素数. 因此,我们可以认为,每

求最大公约数问题

描述 给定两个正整数,求它们的最大公约数. 输入输入一行,包含两个正整数(<1,000,000,000).输出输出一个正整数,即这两个正整数的最大公约数.样例输入 6 9 样例输出 3 提示求最大公约数可以使用辗转相除法:假设a > b > 0,那么a和b的最大公约数等于b和a%b的最大公约数,然后把b和a%b作为新一轮的输入.由于这个过程会一直递减,直到a%b等于0的时候,b的值就是所要求的最大公约数.比如:9和6的最大公约数等于6和9%6=3的最大公约数.由于6%3==0,所以最大公

luoguP1029 最大公约数和最小公倍数问题 [gcd][数论]

题目描述 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数 条件: 1.P,Q是正整数 2.要求P,Q以x0为最大公约数,以y0为最小公倍数. 试求:满足条件的所有可能的两个正整数的个数. 输入输出格式 输入格式: 二个正整数x0,y0 输出格式: 一个数,表示求出满足条件的P,Q的个数 输入输出样例 输入样例#1: 3 60 输出样例#1: 4 说明 P,Q有4种 3 60 15 12 12 15 60 3 先考虑

lightoj 1057 - Collecting Gold(状压dp)

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1057 题解:看似有点下记忆话搜索但是由于他是能走8个方向的也就是说两点的距离其实就是最大的x轴或y轴的差.然后只有15个藏金点状压一下加dfs就行了. #include <iostream> #include <cstring> #include <cstdio> #include <cmath> #define inf 0X3f3f3f