HRBUST 1328 相等的最小公倍数

SOl:将原题改为枚举N的每一对因子,计算其是否互素即可。

#include <cstdio>
#include <cstring>
#include <cmath>

using namespace std;

inline int gcd(int a,int b)
{
	return b==0?a:gcd(b,a%b);
}

int main()
{
	int n,T,i,j;
	scanf("%d",&T);
	while(T--)
	{
		bool flag=true;
		scanf("%d",&n);
		if(n==2)
		{
			printf("NO\n");
			continue;
		}
		int tmp=(int)sqrt((double)n);
		for(i=2;i<=tmp;i++)
		{
			if(n%i==0)
			break;
		}
		if(i==tmp+1)
		{
			printf("NO\n");
			continue;
		}
		for(i=2;i<=tmp;i++)
		{
			if(n%i==0)
			{
				int p=n/i;
				if(gcd(p,i)==1)
				{
					flag=false;
					break;
				}
			}
		}
		if(flag)
			printf("NO\n");
		else
			printf("YES\n");
	}
	return 0;
} 

HRBUST 1328 相等的最小公倍数

时间: 2024-08-26 20:07:07

HRBUST 1328 相等的最小公倍数的相关文章

hrbust1632 最大的最小公倍数(欧几里得)

本文出自:http://blog.csdn.net/svitter 原题:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1632 题意:给你一个数字N,让你在1-n中选三个数字,使其最小公倍数最大. 题解:水题一发..半天没A..呵呵呵呵. 1.相邻自然数肯定互质. 2.依据辗转相除法..shit- -..n和n-3如果有最大公约数肯定是3. AC: //==================

[ALGO-2] 最大最小公倍数

算法训练 最大最小公倍数 时间限制:1.0s   内存限制:256.0MB 问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少. 输入格式 输入一个正整数N. 输出格式 输出一个整数,表示你找到的最小公倍数. 样例输入 9 样例输出 504 数据规模与约定 1 <= N <= 106. 分析: 1.首先明确一个知识点:大于 1 的两个相邻自然数必然互质 2.我们猜想,如果 1 ~ n 中 ( n - 2 ) ( n - 1 ) n 这三个数互质,那么 ( n

HDU 1108: 最小公倍数

最小公倍数 #include<iostream> using namespace std; int gcd(int a, int b) { while (b) { int t = a%b; a = b; b = t; } return a; } int lcm(int a, int b) { return a / gcd(a, b)*b; } int main() { ios::sync_with_stdio(false); int a, b; while (cin >> a &g

辗转相除法 求最大公约数和最小公倍数

# include<stdio.h> int main() { int a,b,c,x,y; printf("请输入两个正整数,用逗号间隔:"); scanf("%d,%d",&a,&b); x=a; y=b; if (a<b) { c=a; a=b; //要保证 a>b b=c; } while (b!=0) { c=a; a=b; b=c%b; } c=x*y/a; printf("最大公约数为%d,最小公倍数为

POJ 1328 Radar Installation

http://poj.org/problem?id=1328 //第一次:从左边第一个未被覆盖的island开始 -->>失败 因为还有y坐标这一因素 不能保证贪心//第二次:找两个点 确定一个圆 ----->>>其实早就应该发现错误 漏洞百出 不具有普遍性//从左边第一个未覆盖的点作为基点 找到第一个 y坐标>=的点(如果没有找到) 做这两个点的公共圆//如果不能做这两个点的公共圆 或者 没有y>=的点 那么做这个圆的右极限圆//更新覆盖的点//蠢-->&

luoguP1029 最大公约数和最小公倍数问题 [gcd][数论]

题目描述 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数 条件: 1.P,Q是正整数 2.要求P,Q以x0为最大公约数,以y0为最小公倍数. 试求:满足条件的所有可能的两个正整数的个数. 输入输出格式 输入格式: 二个正整数x0,y0 输出格式: 一个数,表示求出满足条件的P,Q的个数 输入输出样例 输入样例#1: 3 60 输出样例#1: 4 说明 P,Q有4种 3 60 15 12 12 15 60 3 先考虑

poj3101--Astronomy(分数的最小公倍数)

题目链接:点击打开链接 题目大意:有n个行星,给出每个行星的旋转的周期.问最少多少时间后n个行星会在一条直线上,初始点在一起,不存在全部的行星都有同一个周期 如果A行星的周期是t1.B行星的周期是t2(t2>t1),要在一条直线上,一定会执行的相差半个周期的倍数,时间(t/t2 - t/t1) % (1/2) = 0.也就是t*(t1-t2)/(t1*t2)%(1/2) = 0,要是时间最小.所以也就是差出一个半周期.也就是t = (t2-t1)/(t2*t1*2)这个t也就是A.B执行到一条直

最大公约数和最小公倍数

输入两个正整数m和n求最大公约数和最小公倍数. #include <stdio.h> int main() { int m, n; printf("请输入你要计算的两个数:"); scanf("%d %d", &m, &n); printf("最大公约数是:"); printf("%d\n", get_max_common_measure(m, n)); printf("最小公倍数是:&q

欧几里德公式求最大公因数和最小公倍数

如下: #include<stdio.h> int gcd(int a,int b){ int temp; if(b > a){ temp = b; b = a; a = temp; } while(b){ temp = a%b; a = b; b = temp; } return a; } int lcm(int a,int b,int gcd){ int temp; if(b > a){ temp = b; b = a; a = temp; } return (a/gcd)*b