Giúp em bài tập Java

kinhcan03

Mr & Ms Pac-Man
Tham gia ngày
30/12/07
Bài viết
262
Reaction score
0
Em mới học mấy cái căn bản như boolean, cast, if, for với modulus, thôi mà ông thầy cho 1 bài kêu là viết 1 program để cho nó hiện các số nguyên tố (prime number) lên. Anh chị nào biết ra tay giúp em với. + hay - rep sẽ làm theo yêu cầu:-*
 
public class Prime // tạo public class
{
public static void main(String []args) // tạo 1 method main
{
int i,j;
boolean isprime;

for(i=2; i<100; i++) // tạo loop tự đếm từ 2 tới 100
{
isprime = true;

for (j=2; j<i; j++)// Tự in giá trị của (j) từ 2-100 và điều kiện nhỏ hơn giá trị của (i)
if (i % j == 0) isprime =false; // Loại bỏ giá trị của (i) nếu nó chia hết cho 1 số nhỏ hơn
if(isprime) // chỉ chọn giá trị đúng còn lại
System.out.println(i);
}
}
}
 
public class Prime // tạo public class
{
public static void main(String []args) // tạo 1 method main
{
int i,j;
boolean isprime;

for(i=2; i<100; i++) // tạo loop tự đếm từ 2 tới 100
{
isprime = true;

for (j=2; j<i; j++)// Tự in giá trị của (j) từ 2-100 và điều kiện nhỏ hơn giá trị của (i)
if (i % j == 0) isprime =false; // Loại bỏ giá trị của (i) nếu nó chia hết cho 1 số nhỏ hơn
if(isprime) // chỉ chọn giá trị đúng còn lại
System.out.println(i);
}
}
}

bài nè được điểm nhưng sẽ tốn tài nguyên hệ thống. viết các chương trình nhỏ thì ok. viết các chương trình lớn sẽ bị trừ điểm.
nên thêm dk isprime vào dk của vòng lặp phía trong. nó sẽ làm giảm bớt vòng lặp. thêm nữa chỉ cần check đến j<i/2 không cần check đến j<i
vậy ta được đáp án sau

public class Prime // tạo public class
{
public static void main(String []args) // tạo 1 method main
{
int i,j;
boolean isprime;

for(i=2; i<100; i++) // tạo loop tự đếm từ 2 tới 100
{
isprime = true;
//với i=2 isprime la true. và vòng for không thực hiện do 2>2/2 vậy nên 2 vẫn là số nguyên tố
for (j=2; j<i/2 && isprime; j++)// Tự in giá trị của (j) từ 2-100 và điều kiện nhỏ hơn giá trị của (i)
if (i % j == 0) isprime =false; // Loại bỏ giá trị của (i) nếu nó chia hết cho 1 số nhỏ hơn
if(isprime) // chỉ chọn giá trị đúng còn lại
System.out.println(i);
}
}
}
 
Nếu làm j<i/2 thì 4 sẽ được hiện thị
Mã:
2
3
4
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
 
Tôi nhớ phải là i < j/2+1................
 
:D lâu rùi không xem lại máy cái nè nên không nhớ lắm :">
nếu học về mảng rùi thì làm đơn giản và nhẹ nhàng hơn nhiều.
trong mảng đầu tiên chỉ có 2. mỗi khi gặp một số nguyên tố thì cho số đó vào mảng.
lấy giá trị cần kiểm tra chia cho từng phần tử trong mảng. nếu không chia hết cho các phần tử trong mảng thì sẽ là số nguyên tố.
còn bài trước thì đúng là j<=i/2 hay i<j/2+1 thiệt :D
 
đúng ra thì j<sqrt(i)+1. Học toán tí là biết được mà.
 
Back
Top