您的位置:首页 > 其它

hrbust 1328 相等的最小公倍数(数论)

2014-04-26 14:06 295 查看
Description
定义An为1,2,…,n的最小公倍数,例如,A1 = 1,A2 = 2,A3 = 6,A4 = 12,A5 = 60,A6 = 60。
请你判断对于给出的任意整数n,An是否等于An – 1。
Input
本题有多组测试数据,输入的第一行是一个整数T代表着测试数据的数量,接下来是T组测试数据。
对于每组测试数据:
第1行 包含一个整数n (2 ≤ n ≤ 106)。
Output
对于每组测试数据:
第1行 如果An等于An-1则输出YES否则输出NO。
Sample Input
1
6
Sample Output
YES
/***********************

突然认识到基础不扎实,练习一下打基础,

数论欧几里得算法的简单应用 

题意不说了,很简单,

对于 n ,n为素数时肯定是NO,

对于其他的 n 来说:

如果 n 有一对互质的因子则输出YES,否则输出 NO 。

**********************/

#include <iostream>
#include <stdio.h>
using namespace std;
int gcd(int a,int b)// 求最大公约数
{
if(a == 0)
return b;
int c;
while(b)
{
c = b;
b = a%b;
a = c;
}
return a;
}
int prime(int n)// 判断素数
{
int i;
for(i = 2;i*i<=n;i++)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int i,t,n,leaf;
scanf("%d",&t);
while(t--)
{
leaf = 1;
scanf("%d",&n);
if(prime(n))// n是素数是直接输出NO
{
printf("NO\n");
continue;
}
for(i = 2;i*i<=n;i++)
{
if(n%i==0)
{
int p = n/i;
if(gcd(p,i)==1)
{
leaf = 0;
break;
}
}
}
if(leaf == 1)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM gcd Hrbust 欧几里得