zoukankan      html  css  js  c++  java
  • Hrbust1328 相等的最小公倍数 (筛素数,素因子分解)

    本文出自:http://blog.csdn.net/svitter/


    题意:

    求解An 与 An-1是否相等。

    n分为两个情况——

    1.n为素数,

    2.n为合数。

    =  =好像说了个废话。。素数的时候,能够直接输出no,由于素数不可能和An-1相等。合数的时候,假设n是a^b次方,那么也是NO。原因非常easy,之前数字的最小公倍数的n的因子次方数,不能超过n的次方数。


    //============================================================================
    // Name        : 数论问题.cpp
    // Author      :
    // Version     :
    // Copyright   : Your copyright notice
    // Description : Hello World in C++, Ansi-style
    //============================================================================
    
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    
    using namespace std;
    #define lln long long int
    #define MAXN 1000001
    
    bool vis[MAXN];
    int prime[100000];
    int p;
    
    void Prime()
    {
        //0为不是合数,1为是合数
        memset(vis, 1, sizeof(vis));
        p = 0;
        int i, j;
        for(i = 2; i < MAXN; i++)
        {
            if(vis[i])
            {
                prime[p++] = i;
                for(j = 2 * i; j < MAXN; j += i)
                    vis[j] = 0;
            }
            else
                continue;
        }
    }
    
    void ace(){
    	//init
    	Prime();
    	//work point
    	int t, i;
    	//num
    	int a;
    	int num;
    
    	cin >> t;
    	while(t--){
    		scanf("%d", &a);
    		if(a == 2)
    		{
                printf("NO
    ");
                continue;
            }
    		if(vis[a])
                printf("NO
    ");
            else
            {
                num = 0;
                for(i = 0 ; i <= p; i++)
                {
                    if(a % prime[i] == 0)
                    {
                        num++;
                        while(a % prime[i] == 0)
                            a /= prime[i];
                    }
                    if(a == 1)
                        break;
                }
                if(num >= 2)
                    printf("YES
    ");
                else
                    printf("NO
    ");
            }
    	}
    }
    
    int main() {
    	ace();
    	return 0;
    }
    


  • 相关阅读:
    Uboot USB模式(RK3288变砖头的解决办法)
    C++ 解析一
    C++基础
    shell脚本分析二
    ASCII
    POJ 1970 The Game (DFS)
    PoJ1979 Red and Black (DFS)
    UVA 572 Oil Deposits (DFS)
    打印日历
    求第N个素数
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/3818986.html
Copyright © 2011-2022 走看看