C language programming of 100 cases (10): the greatest common divisor

The greatest common divisor Example 10

Problem Description

Three positive integers a, b, c (0 <a, b, c <10 ^ 6), wherein c is not equal to b. If the greatest common divisor of a and c is b, it is known that a and b, the minimum required to meet the conditions of c.

Input data

A first input row n, there are n sets of test data indicates, the next n lines, each line of input two positive integers a, b.

Output Format

Corresponding to the output c, each set of test data per line.

SAMPLE INPUT

2

6 2

12 4

Sample Output

4

8

        (1) programming ideas.

        Zhuanzhan division method using the greatest common divisor of two integers demand. For example, find an integer m = 48, n = 18, the greatest common divisor of two numbers as the method shown on the left.        

 

 

 Specifically: if m% n == 0, then n is the greatest common divisor, otherwise, computing r = m% n, set m = n, n = r, the process is repeated until m% n == 0.

        Seeking the greatest common divisor of integers m and n are defined as a function

        int gcd(int m,intn); 。

        In this problem, since b is a, c greatest common divisor, and C! = B, so the c = 2 * b, 3 * b ... determined to be exhaustive until the smallest satisfies the condition c.

 
        (2) source.

#include <stdio.h>

int gcd(int m, int n)

{

         int r;

         while(m%n!=0)

        {

                   r=m%n;

                   m = n;

                   n = r;

         }

         return n;

}

int main ()

{

         int t,a,b,c;

         scanf("%d",&t);

         while(t--)

         {

                   scanf("%d%d",&a,&b);

                   c=2*b;

                   while(gcd(a,c)!=b)

                        c+=b;

                   printf("%d\n",c);

         }

         return 0;

}

Exercise 10

10-1  Uniform Generator

        The title chosen from Hangzhou University of Electronic Science and Technology OJ exam (http://acm.hdu.edu.cn/showproblem.php?pid=1014)

Problem Description

Computer simulations often require random numbers. One way to generate pseudo-random numbers is via a function of the form

seed(x+1) = [seed(x) + STEP] % MOD

where '%' is the modulus operator.

Such a function will generate pseudo-random numbers (seed) between 0 and MOD-1. One problem with functions of this form is that they will always generate the same pattern over and over. In order to minimize this effect, selecting the STEP and MOD values carefully can result in a uniform distribution of all values between (and including) 0 and MOD-1.

For example, if STEP = 3 and MOD = 5, the function will generate the series of pseudo-random numbers 0, 3, 1, 4, 2 in a repeating cycle. In this example, all of the numbers between and including 0 and MOD-1 will be generated every MOD iterations of the function. Note that by the nature of the function to generate the same seed(x+1) every time seed(x) occurs means that if a function will generate all the numbers between 0 and MOD-1, it will generate pseudo-random numbers uniformly with every MOD iterations.

If STEP = 15 and MOD = 20, the function generates the series 0, 15, 10, 5 (or any other repeating series if the initial seed is other than 0). This is a poor selection of STEP and MOD because no initial seed will generate all of the numbers from 0 and MOD-1.

Your program will determine if choices of STEP and MOD will generate a uniform distribution of pseudo-random numbers.

Input

Each line of input will contain a pair of integers for STEP and MOD in that order (1 <= STEP, MOD <= 100000).

Output

For each line of input, your program should print the STEP value right- justified in columns 1 through 10, the MOD value right-justified in columns 11 through 20 and either "Good Choice" or "Bad Choice" left-justified starting in column 25. The "Good Choice" message should be printed when the selection of STEP and MOD will generate all the numbers between and including 0 and MOD-1 when MOD numbers are generated. Otherwise, your program should print the message "Bad Choice". After each output test set, your program should print exactly one blank line.

Sample Input

3 5

15 20

63923 99999

Sample Output

         3         5    Good Choice

 

        15        20    Bad Choice

 

     63923     99999    Good Choice

        (1) programming ideas.

          Subject means: an input two integers x and y, if x and y prime, output "Good Choice"; otherwise, outputs "Bad Choice".

         If both x and y are integers greatest common divisor is 1, x and y are relatively prime.

        (2) source.

#include <stdio.h>

int gcd(int a, int b)

{

         int r;

         while(a%b!=0)

        {

                   r=a%b;

                   a = b;

                   b = r;

         }

         return b;

}

int main ()

{

         int x, y;

         while(scanf("%d %d", &x, &y) != EOF)

         {

                   if(gcd(x, y) == 1)

                            printf("%10d%10d    Good Choice\n\n", x, y);

                   else

                            printf("%10d%10d    Bad Choice\n\n",x, y);

         }

         return 0;

}

10-2  Party

        The title North POJ selected exam (http://poj.org/problem?id=3970)

Description

The CEO of ACM (Association of Cryptographic Mavericks) organization has invited all of his teams to the annual all-hands meeting, being a very disciplined person, the CEO decided to give a money award to the first team that shows up to the meeting.

The CEO knows the number of employees in each of his teams and wants to determine X the least amount of money he should bring so that he awards the first team to show up such that all team members receive the same amount of money. You must write a program to help the CEO achieve this task.

Input

The input consists of multiple test cases, each test case is described on a line by itself, Each line starts with an integer N (1 <= N <= 20) the number of teams in the organization followed by N space separated positive integers representing the number of employees in each of the N teams. You may assume that X will always fit in a 32 bit signed integer. The last line of input starts with 0 and shouldn't be processed.

Output

For each test case in the input print "The CEO must bring X pounds.", where X is as described above or "Too much money to pay!" if X is 1000000 or more.

Sample Input

1 3000000

2 12 4

0

Sample Output

Too much money to pay!

The CEO must bring 12 pounds.

       (1) programming ideas.

       That Italy is seeking the input of the least common multiple of positive integers n. Provided positive integers x and y is the greatest common divisor gcd (x, y), the least common multiple of x and y is x * y / gcd (x, y).

      (2) source.

#include <stdio.h>

you lcm (you x, y you)

{

         int r,a,b;

         a=x; b=y;

         while (a%b!=0)

         {

                   r=a%b;

                   a=b;

                   b=r;

         }

         return x*y/b;

}

int main ()

{

         int n,i,x0,x1;

         while(scanf("%d",&n) && n!=0)

         {

                   scanf("%d",&x0);

                   for (i=2;i<=n;i++)

                   {

                            scanf("%d",&x1);

                           x0=lcm(x0,x1);

                   }

                   if (x0>=1000000)

                         printf("Too much money to pay!\n");

                   else

                       printf("The CEO must bring %d pounds.\n",x0);

         }

    return 0;

}

10-3 encounter cycle

Title Description

Two satellites operating cycle is known, they are seeking to meet cycle.

Entry

The first line of the input data T a positive integer, indicates the number of test data sets, then the set of test data T, each comprising two sets of test data is a positive integer, separated by spaces. Each comprising two positive integers, the number of days required revolutions n turns (26501/6335, 26501 represents the transfer ring to 6335 days), with '/' apart.

Export

For each test, they encounter the output period, if the period is an integer met by the integer, or exact-fraction expressed.

SAMPLE INPUT

2

26501/6335  18468/42

29359/11479  15725/19170

Sample Output

81570078/7

5431415

       (1) programming ideas.

        Enter each score is a satellite of the cycle. Two satellites meet demand period, i.e., seeking the least common multiple of both the cycles. First two fractions may be common denominator, find the least common multiple of the two molecules common denominator, the denominator divided by a common denominator, that was met cycles (least common multiple).

       (2) source.

#include <stdio.h>

long long gcd(long long m, long long n)

{

         long long r;

         while(m%n!=0)

        {

                   r=m%n;

                   m = n;

                   n = r;

         }

         return n;

}

int main ()

{

         int t;

         long long a,b,c,d,e,f,n,m,k;

         scanf("%d",&t);

         while(t--)

         {

                   scanf("%lld/%lld%lld/%lld",&a,&b,&c,&d);

                   e=b*c;

                   f=a*d;

                   m = b * d; // common denominator

                   n=gcd(f,e);

                   n=f/n*e;

                   if (n% m == 0) // can remove the entire

                         printf("%lld\n",n/m);

                   else // not divisible, after going to simplification, output scores

                   {

                            k = gcd (m, n); // find the greatest common divisor numerator and denominator

                            printf("%lld/%lld\n",n/k,m/k);

                   }

          }

         return 0;

}

Guess you like

Origin www.cnblogs.com/cs-whut/p/11875136.html