hdu2504

来源:互联网 发布:网络视频策划 编辑:程序博客网 时间:2024/05/20 23:39
代码一:
//这个没有过#include<stdio.h>//typedef long long ll;int main(){    int T;    scanf("%d",&T);    long long a,b;    while(T--)    {        scanf("%lld%lld",&a,&b);        for(long long i=1+b;i<=a*2;i++)        {            if(i%b==0&&i!=a)            {                printf("%lld\n",i);                break;            }        }    }    return 0;}



//给人的感觉是,只要输出的答案,为约数的二倍就可以了。。。。




代码二:
#include<stdio.h>//typedef long long ll;int gcd(int a,int b){    if(a<b)    {        int t=a;        a=b;        b=t;    }    if(b==0) return a;    else return gcd(b,a%b);}int main(){    int T;    scanf("%d",&T);    long long a,b;    while(T--)    {        scanf("%lld%lld",&a,&b);        for(long long i=b*2;i<=a*2;i++)        {            if(gcd(a,i)==b) {                printf("%lld\n",i);break;            }        }    }    return 0;}


代码三:
//接下来这一段代码是在网上找的,其解题思路如下:由于a和c的最大公约数是b,所以a = xb,c=yb。现在相当于已知x,求y。我们由上面可知x和y一定是互质的。只要枚举一下最小的与x互质的自然数就是y了,但是题目要求不等于b,所以要加上不相等的条件。#include<iostream>#include<cstdio>#include<cmath>#include<cstring>using namespace std;int Gcd(int m, int n){    return m == 0 ? n : Gcd(n % m, m );}int main(){    int ncase;    int a, b, c;    scanf("%d", &ncase);    while(ncase--)    {        scanf("%d%d", &a, &b);        int temp = a / b;        for(int i = 2; ; ++i)        {            if(i * b != b && Gcd(temp, i) == 1)            {                printf("%d\n", i * b);                break;            }        }    }    return 0;}


//最后说一下,代码二和代码三是可以过的,但是为什么代码已不能过,和答案为啥每次都是凑巧是:约数*2 ,我还是不知道。
用了一个测试数据:
输入:8 3 
输出:代码一:6
      代码二:无
      代码三:9
原创粉丝点击