Problem Description
![](http://rexdf.org/photo/ghnjk.jpg)
在学习完各类算法之后,yuna决定开始学习数论了。yuna神当然从最简单的最小公倍数学起喽~~~~~
定义 为1,2,…,n的最小公倍数,例如,B 1 = 1,B 2 = 2,B 3 = 6,B 4 = 12,B 5 = 60,……。
yuna想知道对于给出的任意整数n,B n是否等于B n-1。yuna当然是知道答案的喽,但是她想考考rexdf,这次rexdf囧了,请帮帮他吧!
Input
本题有多组测试数据,输入的第一行是一个整数T代表着测试数据的数量,接下来是T组测试数据。
对于每组测试数据:包含一个整数n (2 ≤ n ≤ 10 16)。
对于每组测试数据:包含一个整数n (2 ≤ n ≤ 10 16)。
Output
对于每组测试数据:
第1行 如果B n等于B n-1则输出YES否则输出NO。
第1行 如果B n等于B n-1则输出YES否则输出NO。
Sample Input
1 6
Sample Output
YES
Author
Source
developing schools contest 5
根据解题报告:如果B(n)==B(n-1),那么n分解因式应该有小于sqrt(n)的素数因子,而且不是单个素数的幂。
标程:
#include<iostream>
#include<stdio.h>
#include<string>
#include<math.h>
#include<string.h>
using namespace std;
bool LCM(long long m,long long n)
{
long long r;
do{
r=m%n;
m=n;
n=r;
}
while(r!=0);
if(m==1) return true;
else return false;
}
int main()
{
// freopen("A.in","r",stdin);
// freopen("A.out","w",stdout);
int t;
long long k;
while(scanf("%d",&t)!=EOF)
while(t--)
{
scanf("%I64d",&k);
int d=0;
for(long long i=2;i*i<k;i++)
{
if(k%i==0)
{
if(LCM((k/i),i))
{
d++;
printf("YES\n");
break;
}
}
}
if(d==0)
printf("NO\n");
}
}