Tìm hàng trong ma trận có nhiều số nguyên tố nhất

em muốn trong trường hợp có 2 hoặc nhiều hàng có cùng số lượng SNT thì sẽ thông báo vd: hàng 1 và 2 có nhiều SNT nhất.
đoạn e code chỉ in ra hàng đầu tiên, hàng t2 có số lượng SNT tương đương thì k, e cần sửa chỗ nào ạ.

#include<iostream>
#include<math.h>

using namespace std;

//Kiem tra SNT
bool SNT(int n){
	int i;
	if ( n < 2)
	return false;
	else
	for ( i=2 ; i <= sqrt(n) ; i++ )
	{
		if ( n % i == 0)
		return false; 
	}
	return true; 
}

//Tim hang co nhieu SNT nhat
int TimSNT ( int a[100][100] , int m, int n){
	int dem ;
	int demmax = 0;
	int vitri = 0;
	for ( int i=0 ; i<m ; i++){
		dem =0;
		for ( int j=0 ; j<n ; j++){
			if ( SNT(a[i][j]))
				dem++;
		}
		if( demmax < dem){
			demmax = dem;
			vitri = i+1;
		}
	}
	switch ( demmax)
	{
		case 0:
			cout << "Khong hang nao co SNT.";
			break;
		default:
			cout << "Hang " << vitri << " co nhieu SNT nhat (" << demmax << " SNT)";
			break; 
				
	}
}

Có thể bạn cần đến 2 lần lặp:

  1. Lặp để tìm lượng SNT nhiều nhất.
  2. Lặp để in ra dòng có SNT bằng với số tìm được ở lần lặp 1.

Để tối ưu, hạn chế việc gọi lại quá nhiều lần hàm SNT().

  1. Lần lặp 1 ghi các giá trị số lượng SNT từng dòng vào 1 mảng (mảng có độ dài bằng số dòng của ma trận). Đồng thời ghi nhận giá trị lớn nhất.
  2. Lặp 2, duyệt mảng vừa tạo được để in ra các dòng lớn nhất.
3 Likes

cảm ơn bạn, mình sửa được r :smile:

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