Nhập N>2.Viết N dưới dạng tích các thừa số nguyên tố

“vậy mỗi số nguyên lớn hơn một chỉ có một biểu diễn duy nhất dưới dạng tích thừa số nguyên tố (không kể đến thứ tự các thừa số).”

Thì ra là vậy.Giờ e mới hiểu. hix

Mấy cái này học cho vui, nếu mình không đi nghiên cứu toán, giải thuật, mã hóa tá lả. Nhưng biết để mai mốt đi theo cũng hay.

1 Like

Mình cho chạy vòng for từ 2 đến n.

for(i=2;i<=n;i++){
        while(n%i==0){
            if(n==i) std::cout<<i;
            else std::cout<<i<<" * ";
            n=n/i;
        }
}

Trong for cho 1 vòng while và in ra tất cả những số mà n chia hết chạy từ i=2.
Bạn sẽ thấy là nó sẽ lấy n chia cho 2 đến khi nào không chia hết được nữa thì thôi, mỗi lần n%2 ==0 lại in ra số 2 (2 là số nguyên tố).Sau đó nhảy lên 3 bỏ qua 4 nhảy lên 5 …
Mỗi vòng while n = n/i;
Cứ như thế với 3 và 5 và 7. Đều là những số nguyên tố.
n/i sẽ không chia cho những số có tận cùng là 0 4 6 8 nữa vì đã kiểm tra những số n/i chia hết cho 2. Tương tự với 3 5 7
Số cuối cùng là n/i nếu không chia hết cho i trong đoạn [2,n/i -1] thì chỉ chia hết cho 1 và chính nó nên cũng là số nguyên tố.
Vì vậy không cần kiểm tra i có phải là nguyên tố trong bài code này.

3 Likes
// Phan tich mot so thanh thua so nguyen to, va dua ket qua ra duoi dang (m1,n1)(m2,n2)
// Trong do m1 là thua so nguyen to, con n1 la so mu.

#include<stdio.h>
#include<conio.h>

void main()
{
	int n,i=2;
	int count=0;
	printf(" Nhap so nguyen duong n: ");
	scanf("%d",&n);
	printf(" Thua so nguyen to cua %d la:  ",n);
	while(n!=1)
	{
		if(n%i==0)
		{
			count++;
			n=n/i;
		}
		if(n%i!=0)
		{
			if(count!=0)
			{
				printf("(%d,%d)",i,count);
			}
			
			i++;
			count=0;
		}
		
	}
	getch();
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?