Xác định vị trí của số nguyên tố gần với x nhất

Đề bài là : Nhập một dãy số a có n phần tử là các số nguyên.Nhập số x.Xác định vị trí của số nguyên tố trên a có giá trị gần với x nhất.
Em code như thế này mà ko ra đáp án.Nhờ mn chỉ giáo.

#include <iostream>
#include <math.h>
using namespace std;
int a[100], n, i, j, x, kt;

int nt(int m)
{
	if(m < 2) return 0;
	for(j = 2; j <= sqrt(m); j++)
	{
		if(m%j == 0) return 0;
	}
	return 1;
}

void nhap()
{
	cout << "nhap n = ";
	cin >> n;
	for(i = 0; i < n; i++)
	{
		cout << "a[" << i << "] = ";
		cin >> a[i];
	}
	cout << "x = ";
	cin >> x;
}

void ktra()
{
	kt = 999999;
	for(i = 0; i < n; i++)
	{
		if(abs(x - a[i]) < kt) 
		kt = abs(x - a[i]);
	}
}

void inkq()
{
	cout << "\n";
	for(i = 0; i < n; i++)
	{
		if(nt(a[i]) && (abs(x - a[i]) == kt) )
		cout << i << "  ";
	}
}

int main()
{
	nhap();
	ktra();
	inkq();
}

Mình cho thuật toán thôi nhé , chứ đang dùng ipad: Đặt Min = INT_MAX, duyệt mảng bình thường, trong mỗi lần lặp, kiểm trả xem a[i] có phải số nguyên tố hay không, nếu phải kiểm tra tiếp x - a[i] có nhỏ hơn Min không, nếu nhỏ hơn cap nhật lại Min. Sau khi duyệt xong thì chỉ việc return Min;

3 Likes

tks c, để mình code nhé.

Bonus thêm là nhớ tạo 1 biến vitri = 0 nhé, khi gán x - a[i] cho Max thì ta đồng thời gán i cho vitri luôn và cuối cùng return vitri chứ không phải Max nhé :slight_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?