How many integers can you find993 公约数和公倍数

来源:互联网 发布:智慧足迹大数据 编辑:程序博客网 时间:2024/05/21 06:26



How many integers can you find

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述

给你三个数,n,m1,m2,找出所有小于n的能被m1或m2整除的数的个数。

输入
输入包含多组测试数据,每组数据占一行。
0<n<2^31,0<m1,m2<=10。
输出
每组数据输出占一行。
样例输入
12 2 3
样例输出
7
#include <stdio.h>

int GCD(int x,int y)
{
   if(x%y==0)
      return y;
  else return GCD(y,x%y);
}
int lcm(int x,int y)
{
   int t;
   t=x*y/GCD(x,y);
return t;
}
int main()
{
   int n,m1,m2;
while(scanf("%d %d %d",&n,&m1,&m2)!=EOF)
{
   int s=0;
     n--;
    s=n/m1+n/m2-n/lcm(m1,m2);//要把重合的部分减去,则重合的部分就是找m1,m2的最小公倍数了
   printf("%d\n",s);
}
return 0;

}


公约数和公倍数

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述
小明被一个问题给难住了,现在需要你帮帮忙。问题是:给出两个正整数,求出它们的最大公约数和最小公倍数。
输入
第一行输入一个整数n(0<n<=10000),表示有n组测试数据;
随后的n行输入两个整数i,j(0<i,j<=32767)。
输出
输出每组测试数据的最大公约数和最小公倍数
样例输入
36 612 1133 22
样例输出
6 61 13211 66

#include<stdio.h>
int main()
{
int a,b,c,t,s;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&a,&b);
if(a<b)
{
a=a+b;
b=a-b;
a=a-b;
}
s=a*b;
while(b!=0)
{
c=a%b;
a=b;
b=c;
}
printf("%d %d\n",a,s/a);
}
return 0;
}


最大的最小公倍数

时间限制:1000 ms  |  内存限制:32768 KB
难度:2
描述
  高中时我们对最小公倍数就已经很熟悉了,相信你很快就可以把这个问题解决。这次的问题是:给你一个正整数n,任取三个不大于n的正整数,取法不限,每个数可取多次,使得取到的这三个数的最小公倍数在所有取法中是最大的。
  例如当n = 5 时,不大于5的数为1、2、3、4、5。则应该选3、4、5三个数,它们的最小公倍数是60,在所有取法中是最大的。因此我们得到结果60。
  是不是很简单?抓紧时间 AC 吧。
输入
  输入包含多组测试数据。每组数据为一个正整数n(1≤n≤10^6)。
输出
  对每组测试数据,输出一个整数,代表所有可能取法中,选出的三个数的最小公倍数的最大值。
样例输入
57
样例输出
60210

这个题和公约数没有关系。。。。

是个规律

#include<stdio.h>
int main()
{
long long n,res;
   while(scanf("%lld",&n)!=EOF)
  {
    if(n<3)
        res=n;
      else if
    (n%2)res=n*(n-1)*(n-2);
     else 
{
      res=n*(n-1)*(n-3);
     if(n%3==0)
res=(n-1)*(n-2)*(n-3);
     }
       printf("%lld\n",res);
 }
return 0;
}


但是这个辗转相除法耶很重要,在后面的许多程序中都会用到gcd

0 0
原创粉丝点击