gcd簡單應用

相等的最小公倍數
Time Limit: 1000 MS Memory Limit: 65536 K
Total Submit: 145(55 users) Total Accepted: 63(44 users) Rating:  Special Judge: No
Description

定義An12n的最小公倍數,例如,A1 = 1A2 = 2A3 = 6A4 = 12A5 = 60A6 = 60

請你判斷對於給出的任意整數nAn是否等於An – 1

Input

本題有多組測試數據,輸入的第一行是一個整數T代表着測試數據的數量,接下來是T組測試數據。

對於每組測試數據:

1 包含一個整數n (2 ≤ n ≤ 106)

Output

對於每組測試數據:

1 如果An等於An-1則輸出YES否則輸出NO

Sample Input

1

6

Sample Output

YES

Source
哈理工2012春季校賽熱身賽 2012.04.03
Author
齊達拉圖@HRBUST



首先判斷該數n是否爲素數,,是素數的話,,An  An-1不可能相等,,因爲An會比An-1 乘上一個更大的新素數。。

然後在n不是素數的前提下,,判斷n是否存在 一對互素的因子..即n=a*b(a,b互素)(即gcd(a,b)==1).存在則輸出YES 


/**怎麼判斷相鄰兩個數的lcm是否相等.**/
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int gcd(int a,int b)
{
    if(b==0) return a;
    else    return gcd(b,a%b);
}
int main()
{
    int T,n;
    scanf("%d",&T);
    while(T--)
    {
        int i;
        bool p=true;
        scanf("%d",&n);
        int temp=(int)sqrt((double)n);
        if(n==2)
        {
            printf("NO\n");continue;
        }
        for(i=2;i<=temp;i++)
        if(n%i==0) break;
        if(i==temp+1)
        {
            printf("NO\n");continue;
        }
        for(i=2;i<=temp;i++)
        {
            if(n%i==0)
            {
                int q=n/i;
                if(gcd(q,i)==1)
                {
                    p=false;break;
                }
            }
        }
        if(p) printf("NO\n");
        else printf("YES\n");
    }
    return 0;
}



發佈了84 篇原創文章 · 獲贊 7 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章