Hrbust1328 相等的最小公倍数 (筛素数,素因子分解)

2014-11-24 12:24:37 · 作者: · 浏览: 1

题意:

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

n分为两个情况——

1.n为素数,

2.n为合数。

= =好像说了个废话。。素数的时候,可以直接输出no,因为素数不可能和An-1相等。合数的时候,如果n是a^b次方,那么也是NO。原因很简单,之前数字的最小公倍数的n的因子次方数,不能超过n的次方数。

//============================================================================
// Name        : 数论问题.cpp
// Author      :
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

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