Sửa lỗi bài tìm số nguyên tố gần với số n nhập từ bàn phím?

Đề bài : tìm số nguyên tố gần với số n nhập từ bàn phím (nêu n la sô nguyên tố thì n la kết quả luôn)

#include "stdio.h"
#include "math.h"
#include "conio.h"
int main(int argc, char* argv[])
{
int n,i,ngto, souoc,k,t,j,h,g,u1,u2;

            printf("nhap so can kiem tra: ");
           scanf("%d",&n);
            ngto=(n<2)?0:1;
            for(i=2;i<= sqrt((float)n);i++)
                if (n%i== 0)
                {
                    ngto =0;
                    break;
                }
                if(ngto==1)
                    printf("%d la so nguyen to gan nhat\n",n);
                else
                {

                    for( k=1;k<=n;k++)
                    {
                        t=n-k;
                        u1=0;
                        for( j=2;j<=sqrt((double)t);j++)
                        {
                            if((t%j)==0 )
                            {
                                u1 ++;

                            }
                       }
                   if(j==(int)sqrt((double)t)) break;}
                for(g=1;g<=n;g++)
                {
                    h=n+g;
                    u2=0;
                    for( j=2;j<=sqrt((double)h);j++)
                    {
                        if((h%j)==0)
                        {
                            u2++;

                        }
                    }
                if(j==(int)sqrt((double)h)) break;}

            if ( (u1==0||u2==0) && k<g) printf("%d la so nguyen to gan nhat",t);
            else if ((u1==0 || u2==0) && k>g) printf("%d la so nguyen to gan nhat",h);
            else if(u1==0 && u2==0 && k==g)  printf("%d va %d la so nguyen to gan nhat",t,h);
        }


    return 0;
}
1 Like

Mình thấy code bạn có vẻ không ổn lắm, hơi rắc rối. Ngoài ra, mình ngĩ bạn nên tách riêng các hàm, chức năng riêng, sẽ rất tốt cho bạn sau này. Mình có code bài này, bạn có thể tham khảo. Ngoài ra, khi post bài, bạn nên post tiêu đề cụ thể, ví dụ “sửa lỗi bài tìm số nguyên tố gần nhất”.

    #include "stdafx.h"
    #include "iostream"
    #include "Math.h"
    using namespace std;
    
    bool LaSoNguyenTo(int n)
    {
    	if (n < 2)
    		return false;
    	if (n == 2)
    		return true;
    	for (int i = 2; i <= sqrt(n); i++)
    	{
    		if (n%i == 0)
    			return false;
    	}
    	return true;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int n;
    	cout << "Nhap n: " << endl;
    	cin >> n;
    	if (n < 2)
    	{
    		cout << "Khong ton tai so nguyen to gan nhat"<<endl;
    		
    	}
    	else
    	{
    		for (int i = n; i >= 2; i--)
    		{
    			if (LaSoNguyenTo(i) == true)
    			{
    				cout << "So nguyen to gan nhat la: " <<i<< endl;
    				break;
    			}
    		}
    	}
    
    	system("pause");
    	return 0;
    	
    }
1 Like

@nsmks94 tạo topic khác để hỏi nhé, như vậy dễ trả lời hơn. Các bạn khác đừng nói gì về vấn đề @nsmks94 hỏi nữa, tránh loãng topic, Đạt tạm thời để bài này chưa xóa ngay. Sau 24h bài này sẽ được xóa.

Cảm ơn @nsmks94 :smile:

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