数论基础题.
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int main() { int a,b,n,N; scanf("%d",&N); while(N--) { scanf("%d %d %d",&a,&b,&n); if(n%GCD(a,b)==0) printf("Yes\n"); else printf("No\n"); } return 0; }
int main () { int N,M,a,b; scanf("%d",&N); while (N--){ scanf("%d %d",&a,&b); M = GCD(a,b); printf("%d %d\n",M,a * b / M); } return 0; }
练习:最小公倍数
• http://acm.hdu.edu.cn/showproblem.php?pid=1019 • 描述:The least common multiple (LCM) of a set of positive integers is the smallest positive integer which is divisible by all the numbers in the set. For example, the LCM of 5, 7 and 15 is 105. • 输入:Input will consist of multiple problem instances. The first line of the input will contain a single integer indicating the number of problem instances. Each instance will consist of a single line of the form m n1 n2 n3 ... nm where m is the number of integers in the set and n1 ... nm are the integers. All integers will be positive and lie within the range of a 32-bit integer. • 输出:
基础题2:判断二元一次方程有没有整数解
描述:
已知二元一次方程 a*x+b*y=n, 判断这个二元一次方程有没有整数解,x,y 为未知数,其中a,b,n都为整数且不等于零,同时满足0<a,b,n<2^16-1。 输入:第一行有一个整数0<n<=1000000表示有 n组测试数据,接下来的每一行 有三个整数分别是a,b,n
http://acm.nyist.net/JudgeOnline/problem.php?pid=40
• • • • • • • • • • • • • • • • • • • • • • • • • •
#include <stdio.h>
int GCD(int a, int b){ if(a < b){ return GCD(b,a); } if(b == 0){ return a; } else{ return GCD(b, a % b); } }
#include <stdio.h> int gcd(int x,int y) { return x?gcd(y%x,x):y; } int main() { int i,j,n,m,ret,tem; scanf("%d",&n); while(n--) { scanf("%d",&m); scanf("%d",&ret); m--; while(m--) { scanf("%d",&tem); ret=ret/gcd(ret,tem)*tem; } printf("%d\n",ret); } }
练习:青蛙约会
http://poj.org/problem?id=1061
描述:两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它 们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面 为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征, 也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着 某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点 上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个 程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。 我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点, 由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设 青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一 次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出 它们跳了几次以后才会碰面。 输入: 输入只包括一行5个整数x,y,m,n,L,其中x≠y < 2000000000,0 < m、n < 2000000000,0 < L < 2100000000。 输出: 输出碰面所需要的跳跃次数,如果永远不可能碰面则输出一行"Impossible“ Sample Input 12345 Sample Output 4
分析:
求n个数的最小公倍数我们最
容易想到的思路就是求出两个 数的最小公倍数,然后再用这 个最小公倍数与第三个数球最 小公倍数,依次下去就可以求 出n个数的最小公倍数了。至 于两个数的最小公倍数我们从 上面的习题中已经可以知道方
法了。
a*b=gcd(a,b)*lcm(a,b); 另一思路:短除法
• • • • • • • • • • • • • • • • • • • • • • •
输出:
整数x和y使得方程有解,输出“Yes”,否则输出“No” 样例输入 2 242 397 样例输出 Yes No
• • • • • • •百度文库• • • •
#include<stdio.h> int GCD(int a, int b){ if(a < b){ return GCD(b,a); } if(b == 0){ return a; } else{ return GCD(b, a % b); } }
基础题1:公约数 公倍数
描述: 小明被一个问题给难住了,现在需要你帮 帮忙。问题是:给出两个正整数,求出它 们的最大公约数和最小公倍数。 输入: 第一行输入一个整数n(0<n<=10000),表 示有n组测试数据; 随后的n行输入两个整数i,j(0<i,j<=32767)。 输出: 输出每组测试数据的最大公约数和最小公 倍数