30/09/2018, 16:16

Làm sao để xuất mảng con chỉ gồm các số nguyên tố và dài nhất?

Em có một bài tập sau chưa làm được mọi người giúp em nhé

  1. Xuất ra đoạn con dài nhất chứa toàn số nguyên tố
    ví dụ : mảng 9 chữ số : 5,5,7,8,9,7,5,3,2=> xuất ra : 7,5,3,2
    Cảm ơn mọi người !
    Tiện cho em hỏi sao clip của anh Đạt trên youtube phần C++ k nge tiếng đc v
TTmagic viết 18:32 ngày 30/09/2018

Duyệt mảng, kiểm tra nguyên tố rồi xuất ra

Số nguyên tố: Số nguyên tố là số tự nhiên chỉ chia hết cho 1 và chính nó. Ngoài ra nó không chia hết cho bất cứ số nào khác. Số 0 và 1 không được coi là số nguyên tố. - Theo wiki Số 2 là số nguyên tố chẵn duy nhất. Cấu trúc ở dạng C: int soNguyenTo(int soA) { if (soA < 2) return 0; for (int i = 2; i <= sqrt((float)soA); i ++) { if (soA%i==0) { return 0; } } return 1; } Định nghĩa : Do người dùng tự tạo. Có thể có nhiều…

dactien020796 viết 18:18 ngày 30/09/2018

cái này là xuất đoạn con dài nhất a ơi, ví dụ của em là có 2 đoạn con, 1 đoạn con có 3 ptử là {5,5,7} còn đoạn còn lại 4 ptử {7,5,3,2}. Đoạn sau dài hơn đoạn đầu nên xuất đoạn sau ra

TTmagic viết 18:28 ngày 30/09/2018

a @ltd vào cứu e :running:

viết 18:24 ngày 30/09/2018

Đoạn dài nhất sẽ là đoạn được xét từ đầu đến cuối thôi chứ sao nữa. Nếu yêu cầu thêm điều kiện chuỗi nguyên tố này phải tăng hoặc giảm dài nhất thì mới cần dùng quy hoạch động. Chứ chỉ có mỗi điều kiện là số nguyên tố thì dùng quy hoạch động làm gì cho tốn công.
Sao bạn không chọn ra đoạn 5 5 7 7 5 3 2 cho dài?

dactien020796 viết 18:31 ngày 30/09/2018

bạn k hiểu ý đề bài r, nghĩa là đề bài cho 1 mảng n ptử thì mình kiếm đoạn con nào đó sao cho thỏa đoạn vừa là số nguyên tố và đoạn con đó phải dài nhất so với các đoạn con số nguyên tố khác. Nếu mà đoạn dài nhất là đoạn được xét từ đầu đến cuối thì dễ r

viết 18:19 ngày 30/09/2018

Là đoạn liên tục à? Thế thì cứ kiểm tra đến phần tử nào là số nguyên tố thì bắt đầu từ đó thôi. Cứ kiểm tra next element xem có phải là nguyên tố không, phải thì tăng độ dài lên 1. Sau khi gặp phần tử không phải nguyên tố thì so sánh độ dài đó với max_length.

dactien020796 viết 18:21 ngày 30/09/2018

à nếu so sánh thì mình làm được r, bây h đang k biết cách làm sao xuất ra các ptử của đoạn liên tục dài nhất đó

viết 18:28 ngày 30/09/2018

Bạn lưu chỉ số phần tử bắt đầu đoạn dãy nguyên tố con đó. Nếu đó là đoạn có độ dài lớn nhất thì bạn in mảng từ chỉ số đó đến khi gặp phần tử không phải là số nguyên tố hoặc kết thúc mảng thì thôi.

dactien020796 viết 18:27 ngày 30/09/2018

đây là đoạn code kiểm tra đoạn liên tục dài nhất, bạn thêm giúp mình phần xuất các ptử ra được k

int cau1(int a[], int n)
{
	int d=0,max=0;
	for (int i=0; i<n; i++)
	if(nguyento(a[i])) d++;
	else 
	{
		if (d>max) max=d;
		d=0;
	}
	return(d>max?d:max);
}
Sáng Béo viết 18:25 ngày 30/09/2018

đây là đoạn code kiểm tra đoạn liên tục dài nhất, bạn thêm giúp mình phần xuất các ptử ra được k

bạn cần 1 biến lưu lại chỉ số đầu tiên của dãy dài nhất nữa

viết 18:30 ngày 30/09/2018
#include <iostream>
using namespace std;

bool SNT(int n)	{
	
	if(n < 2)
		return 0;
	
	for(int i = 2; i*i <= n; i++)	{
		
		if(n%i == 0)	
			return 0;
	}
	
	return 1;
}

int main() {
	
	int a[] = { 5,5,7,8,9,7,5,3,2 };
	int n = sizeof(a)/sizeof(n);
	int max_length = 0,index = -1;
	
	for(int i = 0; i < n; i++)	{
		
		if(SNT(a[i]))	{
			
			int length = 1,temp_index = i;
			while(SNT(a[i+1]))	{
				
				length++;
				i++;
			}
			
			if(max_length < length)	{
				
				max_length = length;
				index = temp_index;
			}
		}
	}
	
	for(int i = index; i < n; i++)    {
		if(SNT(a[i]))
			cout << a[i] << " ";
                else
                        break;
        }
			
	cout << endl;
	cout << "Max length: " << max_length << endl;
	return 0;
}
Sáng Béo viết 18:23 ngày 30/09/2018
for(int i = index; i < n; i++)    {
		if(SNT(a[i]))
			cout << a[i] << " ";
                else
                        break;
        }

chỗ này mình nghĩ là sửa như này thì ổn hơn:

for(int i = index; i < max_length+index; i++)
	cout << a[i] << " ";
Bài liên quan
0