您的位置:首页 > 其它

哈理工 hrbust 1328 相等的最小公倍数

2017-01-21 21:48 169 查看
规律题。。。。。
仔细想一下如果这个数是素数那么它一定不相等
如果的分子中所有的分子没有一对是素数的,对,,你没看错就是一对
因为一对因子如果都不是素数那么她的最大公约数就不是n
n只是她的最大公约数的一个倍数对不。。
所以我们要找因子数是素数的而且一对都是素数的。。
这样他们的乘机就是n
前面坑定用不上他俩。。
所以我们主要扫的就是n到底有没有素数的因子对
相等的最小公倍数
Time Limit: 1000 MSMemory Limit: 65536 K
Total Submit: 529(180 users)Total Accepted: 208(154 users)Rating: 





Special Judge: No
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

Source
哈理工2012春季校赛热身赛 2012.04.03
Author
齐达拉图@HRBUST
#include<stdio.h>

#include<math.h>

int gcd(int a,int b)

{

    return b?gcd(b,a%b):a;

}

int main()

{

    int t;

    scanf("%d",&t);

    while(t--)

    {

        int n;

        scanf("%d",&n);

        if(n==2)

         {

             printf("NO\n");continue;//特殊情况

         }

        int flag=0;

        int z=sqrt(n)+1;

        for(int i=2;i<z;i++)

        {

            if(n%i==0)

            {

                int x=n/i;

                if(gcd(x,i)==1)

                   flag=1;

            }

        }

        if(flag)

            printf("YES\n");

        else printf("NO\n");

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hrbust