zoukankan      html  css  js  c++  java
  • HDU1576 A/B (解法二)【试探法】

    问题链接HDU1576A/B

    问题简述:参见上述链接。

    问题分析之前给出来一个用扩展欧几里德算法解本问题的方法,时间上则比较慢。试探法有时也是高效率的。

    根据题意,输入的n=A%9973(没有输入A),A%B=0(A必能被B整除),B与9973互素(GCD(B,9973)=1)。

    解题过程首先是建立方程,然后才能编写程序。

    设x=(A/B)%9973(x是最终想计算的值,满足0<=x<=9972),则9973k+x=A/B(k为整数),得A=9973Bk+xB。

    因为n=A%9973与A=9973Bk+xB,所以xB%9973=n,得xB=n+9973y,亦得xB-n=9973y。

    故:(xB-n)%9973=0

    对于上式,只需要用试探法就可以求得x。这样,程序运行速度相当快。

    需要主意的是,变量类型为long时没有AC,改为long long就AC了,有点奇怪。也许评价系统所用编译版本的long类型不是64位的,才有这种情况。

    程序说明:(略)


    AC的C语言程序如下:

    #include <stdio.h>
    
    int main(void)
    {
        int t, i, j;
        long long n, b, a=9973;
    
        scanf("%d", &t);
        for(i=0; i<t; i++) {
            scanf("%lld%lld", &n, &b);
            for(j=0; j<a; j++)
                if((j * b - n) % a == 0) {
                    printf("%d
    ", j);
                    break;
                }
        }
    
        return 0;
    }


  • 相关阅读:
    新概念4-38
    新概念4-37
    新概念4-36
    新概念4-35
    国史通鉴-03 天下为私 04
    新概念4-34
    西门子 框架断路器 及其他中低压配电设备资料查询
    OPC UA 的本质
    经典Scout添加等时同步设备
    同步报故障解同步启动
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564916.html
Copyright © 2011-2022 走看看