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
-
输入包含多组测试数据,每组数据占一行。
{
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)。
输出
- 输出每组测试数据的最大公约数和最小公倍数 样例输入
-
3 6 6 12 11 33 22
样例输出
-
6 6 1 132 11 66
-
第一行输入一个整数n(0<n<=10000),表示有n组测试数据;
#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)。 输出
- 对每组测试数据,输出一个整数,代表所有可能取法中,选出的三个数的最小公倍数的最大值。 样例输入
-
5 7
样例输出
-
60 210
这个题和公约数没有关系。。。。
是个规律
#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