• Khung trình chiếu

Bài tập: Phân tích thành tổng và thừa số nguyên tố

Các mã nguồn được viết bằng ngôn ngữ Pascal
Gửi hồi đáp
Ảnh đại diện người dùng
huynhbuutam
Nhà sáng lập
Nhà sáng lập
Các bài viết: 112
Đã gia nhập lúc: T3 31 Th8, 2021 22:04
Địa điểm: Trường THCS Châu Lăng
Tên thật: Huỳnh Bửu Tâm

Bài tập: Phân tích thành tổng và thừa số nguyên tố

Bài viết bởi huynhbuutam »

Phân tích thành tổng
Cho một số tự nhiên n (3<=n<=1000). Phân tích n thành các tổng sao cho mỗi tổng gồm đúng k số hạng. Các số hạng của tổng phải lớn hơn 0 và trong mỗi tổng không có 2 số hạng giống nhau. Hai tổng được gọi là khác nhau nếu chúng khác nhau ít nhất một số hạng.
Viết chương trình giải quyết bài toán trên theo các yêu cầu sau:
- Input: Giá trị N và K
- Output: Kết quả của bài toán, mỗi tổng ghi trên một dòng. Trong mỗi tổng, các số hạng cách nhau ít nhất một ký tự trắng.
Chương trình ví dụ:

Mã: Chọn tất cả

Input:
8 3
Output:
1 2 5
13 4
Mã nguồn:

Mã: Chọn tất cả

Var mTest : Array[1..100] Of Integer;
	N, K : Integer;

Procedure Print;
Var i : Integer;
Begin
	For i := 1 To K Do Write(mTest[i], ' ');
	WriteLn;
End;
    
Procedure Process;
Var i, j, T : Integer;
	Flag : Boolean;
Begin
	T := 0;
	For i := 1 To K Do T := T + mTest[i];

	Flag := True;
	If T = N Then Begin
		For i := 1 To K-1 Do
			For j := i+1 To K Do
				If mTest[i] >= mTest[j] Then Flag := False
	End Else Flag := False;

	If Flag Then Print;
End;

Procedure Test(m : Integer);
Var i : Integer;
Begin
	For i := 1 To N Do Begin
		mTest[m] := i;
		If m = K Then Process Else Test(m + 1);
	End;
End;

Begin
	ReadLn(N, K);
	If Not ((3 <= N) And (N <= 1000) And (K > 0)) Then Begin
		Write('Input khong hop le');
		ReadLn;
		Exit;
	End;
	Test(1);
	ReadLn;
End.
Phân tích ra thừa số nguyên tố
Viết chương trình cho phép phân tích một số nguyên N ra thành thừa số nguyên tố và ghi kết quả dưới dạng tích của các lũy thừa.
Chương trình ví dụ:

Mã: Chọn tất cả

Input: 200
Output: 2^2*3*5^2

Mã: Chọn tất cả

Uses Crt;
Function SNT(N : Integer) : Boolean;
Var i : Integer;
Begin
	If N <= 1 Then Exit(False);
	For i := 2 To N - 1 Do
		If N Mod i = 0 Then Exit(False);
	Exit(True);
End;

Var i, N, S, k : Integer;
	First : Boolean;
Begin
	ClrScr;
	ReadLn(S);
	N := S;
	First := True;
	For i := 2 To S Div 2 Do
		If SNT(i) And (N Mod i = 0) Then Begin
			k := 0;
			
			While N Mod i = 0 Do Begin
				Inc(k);
				N := N Div i;
			End;
			
			If Not First Then Write('*')
			Else First := False;
			
			If k > 1 Then Write(i, '^', k)
			Else Write(i);
		End;
	ReadLn;
End.
Gửi hồi đáp
  • Similar Topics
    Các hồi đáp
    Lượt xem
    Bài viết cuối