Chào mọi người

Em gặp vấn đề bài C11PNUM

Đề bài: http://vn.spoj.com/problems/C11PNUM/

Em xài sàng eratosthene, dùng kiểu qword, và khi xem a*b<=n thì kiểm tra n div a<b thì là false còn ngược lại thì là true. Nhưng không biết sao khi chấm thì chỉ được 0 đ.

Em mong nhận được sự giúp đỡ.

Đây là code của em: http://ideone.com/aErbX2

Em cảm ơn rất nhiều.

Bài của em bị tràn mảng. Trong đề bài ghi là 1 <= N <= 2^64 - 1.
Code của em đoạn này sẽ bị tràn khi N to.

primity=array [1..300000] of qword;
...
for i:=2 to trunc(sqrt(n)) do
   if prime[i]=0 then

 

Trả lời Songuku95
  Hiện bài gốc

Cảm ơn anh, nhưng em thử tăng số phần tử rồi nhưng trình biên dịch lại báo lỗi.

Trả lời thongnguyen050999
  Hiện bài gốc

1 <= N <= 2^64 - 1 tức là sqrt(n) <= 2^32. Khi viết prime[i] với i = sqrt(n) thì có nghĩa là em phải khai báo mảng primity=array [1..2^32] of qword. Nhưng điều đó là không thể vì nó quá tốn bộ nhớ. Em nên tìm cách khác xem sao :)