hrbust 1328 相等的最小公倍數(數論)

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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章