Tham khảo

Trần Nguyên Vũ  •  1 tháng trước


#include <stdio.h>

int main(){
   unsigned long long n,tong=1;
   scanf("%lld",&n);
   unsigned long long goc = n;
    
   for(unsigned long long i=2; i*i<=n; i++){
      if(n%i==0){
        tong *=i;
        while(n%i==0){
          n /= i;
        }
      }
   }
   
  if(n>1)
    tong *= n;
    
  if (tong < goc)
      printf("YES");
  else
      printf("NO");
  
   return 0;
}

Đơn giản chỉ cần phân tích thừa số nguyên tố là xong ví dụ: n = 60 thì thừa số nguyên tố là 2 2 3 5 thì ta thấy tích 2 3 5 < 60 => YES


Bình luận:

Nếu muốn nhanh hơn ta sẽ tách riêng số nguyên tố 2 làm riêng để kiểm tra và 1 for để kiểm tra với các thừa số nguyên tố còn lại , bởi vì từ >2 trở đi các số nguyên tố là số lẻ thế nên for sẽ chạy i+=2 sẽ tiếp kiệm hơn 1 chút.


Trần Nguyên Vũ  •  1 tháng trước