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.