In các số nguyên tố nhỏ hơn N chỉ dùng đệ quy

anh đạt ơi?em đang có một bài tập mà k piết sử lí thuật tuán kiểu j?

Đề là viết hàm Xây dựng chương trình C cho phép nhập vào một số và in ra các số nguyên tố nhỏ hơn số vừa nhập

Điều khó là yêu cầu bài tập là dùng hàm đại quy để sử lí bài toán(k dùng vòng lặp)

Bạn viết hai ham đệ quy để tính,
Hàm kt_nt và in_nt
mình viết sơ sơ:

        bool kt_nt(int so,int i = 2) 
{
        if (i == so) return true;
	if (so % i == 0) return false;
	return is_nt(so, i + 1);
}

và ham in

void in_so_nt(int so)
{
	if (so == 1)
	{
		cout << "1 ";
		return;
	}
	if (is_nt(so)) cout << so << " ";
	in_so_nt(so - 1);
}

bạn có thể viết một bài hoàn chỉnh cho mình xem có dk k? :frowning:

Vãi bạn…bác ấy làm đến mức đó là đã hơi phá nguyên tắc của diễn đàn về hỏi bài tập rồi…có sẵn hàm rồi chỉ việc truyền tham số vào thôi, tự tìm hiểu cho nhớ :disappointed_relieved:

#include<conio.h>
#include<stdio.h>
#include<math.h>
int check(int n,int c,int d)
{
    if (c>d)
        return 1;
    if (n%c==0)
    return 0;
    return check(n,c+1,d);
}
int in(int n)
{
    ckeck(n,2,sqrt(d));
}
main()
{
int n,i;
for(i=0;i<30;i++)
printf("%d  = %d",i,in(i));
getch();
}

Các bác thử kiểm tra xem sao nó lại không chay được?

is_nt ở dòng thứ 5 có phải là callback của hàm kt_nt phía trên không nhỉ :smile:

callback là sao bạn. Cái đó chỉ là gọi lại hàm ở trên thôi mà.

#include <iostream>
#include <conio.h>
#include <windows.h>


int timSoNT(int n){
    if( n == 1 )return 0;
    
    int tong = 0;
    for( int i = 2; i < n; i++) if( n % i == 0){
        tong++;
        break;
    }
    
    if(tong == 0){
        std::cout << n << "\n";
        n--;
        timSoNT(n);
    }else{
        n--;
        timSoNT(n);
    }
}

int main (void){
    int n;
    std::cout << "nhap vao gia tri cua n: " << "\n";
    std::cin >> n;
    system("cls");
    std::cout << "cac so la so nguyen to:\n";
    timSoNT(n);
    _getch();
    return 0;
}

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