Phân tích thừa số nguyên tố bằng function

Hello mọi người mình mới học về lập trình C.

Tuần trước mới kiểm tra về phân tích thừa số nguyên tố ( cái đó hơi khó nhưng mình đã làm xong )
tuần này ông giáo sư cho 1 bài khó quá không biết giải như thế nào nên lên đây hỏi mn k biết có ai giúp đc không.

Tuần này cũng là phân tích thừa số nguyên tố cơ mà phải làm theo function. Prototype là int thuasonguyento(int);

Trong main sẽ là

int main(){
     int songuyento;
     while((songuyento = thuasonguyento(15))>1)
     printf("%d \n",songuyento);
     while((songuyento = thuasonguyento(5))>1)
     printf("%d \n",songuyento);
     songuyento = thuasonguyento(1);
     printf("%d \n",songuyento);
}

Kết quả trên command
3
5
5
-10

nếu số nhận vào k phải là số nguyên tố (number<2) thì sẽ return -10. Trong function k đc so printf hay scanf chỉ đc dùng return, k đc phép dùng global variables
nếu function đã liệt kê hết các số nguyên tố mà đc gọi thêm 1 lần nữa thì sẽ return -9

ví dụ

while((songuyento = thuasonguyento(15))>1)
     printf("%d \n",songuyento);
printf("%d\n",thuasonguyento(15));

result
3
5
-9

Nếu có ai giúp đc mình giải đc bài này thì mình xin cảm ơn.

cảm ơn mn đã sửa bài viết cho mình

Hi david nguyen.
Liêtj kê số nguyên tố thì bạn có vòng lặp while đến khi nào số đầu vào bằng một và một vòng for để tìm các thừa số nguyên tố -> chuyển vòng for vào hàm thôi. (Bạn up code tuần trước lên xem.)
“nếu function đã liệt kê hết các số nguyên tố mà đc gọi thêm 1 lần nữa thì sẽ return -9” Cái này bạn có thể up lại đề gốc không vì trong C hàm không nhớ trạng thái. Nên nó sẽ không biết được gọi thêm một lần nữa là gì.

Ví dụ nó ntn

printf("%d\n",thuasonguyento(8));
printf("%d\n",thuasonguyento(8));
printf("%d\n",thuasonguyento(8));
printf("%d\n",thuasonguyento(8));

thì kết quả trên command sẽ là

2
2
2
-9

nếu số nguyên tố đã đc tách hoàn toàn mà gọi function thêm 1 lần nữa thì sẽ return -9

Hi david nguyen.

  1. Thay vì in ra thì bạn return lại là được.
  2. Các biên b, c có thể khai báo trong hàm luôn không cần truyền vào.
  3. Xem lại đề ý cuối. Mình nghĩ nó có vấn đề.

Dùng static mới được, vì biến static là biến dùng chung của cái hàm đó.

Tuy nhiên nếu đề là mô phỏng cái generator (bên lập trình hàm) thì hơi bị căng.

2 Likes

mình k nghĩ bài này nó căng quá đâu … tại lớp mình học C mới đc có 1-2 tháng

Hi david nguyen
Bạn đua a/b ra ngoài.
b = function(a)
a = a / b (loop)

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?