Thực ra đây là bài toán đơn giản. Đầu tiên mình kiểm tra tính chia hết cho 2,3,5. Sau đó dùng bước nhảy, nhảy 2 rồi nhảy 4 vì nhận xét thấy rằng một số chia cho 6 chỉ dư 5 hoặc 1.
Sau đó mình dùng một biến để lưu lại kết quả đã chia. Nếu luu>1 hiển thị số ^ lũy thừa.
#include
#include
#include
//--------------------------------
long nhap();
char luu(long i, long *n);
void xuat(char luu,long nt,long n);
//--------------------------------
void main()
{
long n,nt;
char tg,tang;
clrscr();
n=nhap();
cout<<n<<"=";
if (n==1) return;
for (nt=2;nt<=3;nt++)
{
tg=luu(nt,&n);
if (tg>0) xuat(tg,nt,n);
}
tang=4;
nt=5;
/*
Neu n la so NT thi phep chia 6 chi du 1 va 5 do da kt
tinh chia het cho 2;3.
*/
while (nt<=sqrt(n))
{
tg=luu(nt,&n);
if (tg>0) xuat(tg,nt,n);
tang=6-tang;
nt+=tang;
}
if (n!=1) cout<1 chac chan n la so nt.
getch();
}
//--------------------------------
long nhap()
{
long tg;
cout<<"Moi ban nhap mot so lon hon 0: ";
cin>>tg;
while (tg<=0)
{
cout<<"Moi ban nhap lai: ";
cin>>tg;
}
return tg;
}
//------------------------------
char luu(long i, long *n)
{
char tg=0;
while (*n%i==0) //dem so lan chia het cua 1 so nt
{
tg++;
*n/=i;
}
return tg;
}
//------------------------------
void xuat(char luu,long nt,long n)
{
if (luu==1)
cout<<nt;
else cout<<nt<<"^"<<(int)luu;
if (n!=1) cout<<" * ";//Neu n=1 thi khong con so nt nao
}
Không có nhận xét nào:
Đăng nhận xét