A/B(第五次i题)

A/B

问题链接

http://acm.hdu.edu.cn/showproblem.php?pid=1576

Problem Description

要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。

Input

数据的第一行是一个T,表示有T组数据。
每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。

Output

对应每组数据输出(A/B)%9973。
Sample Input
2
1000 53
87 123456789
Sample Output
7922
6060

问题分析

用枚举法暴力解题:
题目已知A%9973和B,B与9973互质,要求A/B%9973。
设i=(A/B)%9973,则9973x+i=A/B,得A=9973Bx+iB①。
已知n=A%9973②,由①②所以i
B%9973=n③,得iB=n+9973y,即iB-n=9973y。所以:(i*B-n)%9973=0④
(这里的k,y都为整数)
于是枚举i满足③或④式的i即为答案。注意B为long long类型!

AC代码

#include <iostream>
#include <string.h>
#include <algorithm> 
using namespace std;
int main()
{
      
     long long int n,b,k,i;
      cin>>k;
      while(k--&&cin>>n>>b)
	  {
          
         for(i=0;i<9973;i++)
           if((i*b-n)%9973==0)
		   break;
		   cout<<i<<endl;
     }
     return 0;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package setp17; import java.util.Arrays; import java.util.Scanner; public class HelloWorld { /********** Begin **********/ /** * 第一:定义一个方法 接收两个整数类型的参数 a和b,返回两个数的和 返回值类型为int 方法名为:getSum */ static int getSum(int a,int b){ int sum=a+b; return sum; } /** * 第二: 定义一个方法 接收三个double类型参数a,b,c, 返回这三个数的平均值 返回值类型为double 方法名为:getAvg */ public static void getAvg(double a,double b,double c){ double avg=(a+b+c)/3.0; return avg; } /** * 第三: 定义一个方法 接收两个参数 a 和b 打印a行 b列的一个矩形 不需要返回值 方法名为:printRect */ public static void printRect(int a,int b){ for(int i=0;i<a;i++){ for(int j=0;j<b;j++){ System.out.println("*"); } } } /** * 第四:定以一个方法,接收整形数组 为参数 对这个数组进行升序排序 最后输出该数组 不需要返回值 方法名为 sortArr */ public static void storArr(int a []){ for(int j=0;j<a.length;j++){ for(int i=0;i<a.length-1;i++){ if(a[i]>a[i+1]){ int temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; } } } /** * 第五 * 你只需要实现for 循环括号的内容就可 ,打印语句系统已经给你完成 */ static void Print99() { for (int j=1;j<10;j++) { for(int i=1;i<10;i++) { if(i<=j){ System.out.print(j + " * " + i + " = " + i * j + "\t"); } } System.out.println(); } } /********** End **********/ } 怎么修改
最新发布
05-30
这段代码存在几个问: 1. 第二的方法定义中,返回类型为void,但是方法体中有return语句,需要将返回类型修改为double。 2. 第三的方法定义中,打印矩形的语句应该使用System.out.print而不是System.out.println,否则会在每个*后面打印一个换行符。 3. 第四的方法定义中,方法名应该是sortArr而不是storArr。 4. 第五的方法定义中,方法名应该是Print99而不是Print9。 修改后的代码如下: ```java package setp17; import java.util.Arrays; import java.util.Scanner; public class HelloWorld { /** * 第一:定义一个方法 接收两个整数类型的参数 a和b,返回两个数的和 * 返回值类型为int 方法名为:getSum */ static int getSum(int a, int b) { int sum = a + b; return sum; } /** * 第二: 定义一个方法 接收三个double类型参数a,b,c, 返回这三个数的平均值 * 返回值类型为double 方法名为:getAvg */ public static double getAvg(double a, double b, double c) { double avg = (a + b + c) / 3.0; return avg; } /** * 第三: 定义一个方法 接收两个参数 a 和b 打印a行 b列的一个矩形 * 不需要返回值 方法名为:printRect */ public static void printRect(int a, int b) { for (int i = 0; i < a; i++) { for (int j = 0; j < b; j++) { System.out.print("*"); } System.out.println(); } } /** * 第四:定以一个方法,接收整形数组为参数 对这个数组进行升序排序 最后输出该数组 * 不需要返回值 方法名为 sortArr */ public static void sortArr(int a[]) { for (int j = 0; j < a.length; j++) { for (int i = 0; i < a.length - 1; i++) { if (a[i] > a[i + 1]) { int temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } } } System.out.println(Arrays.toString(a)); } /** * 第五 * 你只需要实现for 循环括号的内容就可 ,打印语句系统已经给你完成 */ static void Print99() { for (int j = 1; j < 10; j++) { for (int i = 1; i < 10; i++) { if (i <= j) { System.out.print(j + " * " + i + " = " + i * j + "\t"); } } System.out.println(); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值