Chủ đề: Số phong phú!
-
03-02-2010, 03:55 AM #1
Silver member
- Ngày tham gia
- Aug 2015
- Bài viết
- 13
Số phong phú!
Đề ra: Số phong phú là số có tổng các ước nguyên của nó (không bao gồm nó) lớn hơn nó. Ví dụ: 6, có ước 1, 2, 3-> 6 không là số phong phú. 12 có ước là 1, 2, 3, 4 6 -> 12 là số phong phú. Sử dụng thiết bị nhập xuất chuẩn, tìm xem có bao nhiêu số phong phú trong đoạn [L;R].
Lưu ý:
- L và R trên cùng một hàng cách nhau bởi " ".
- 1<=L<=R<=1,000,000,000 (10^9)
Code của mình chỉ qua được 60% test, các bạn hãy đưa ra code tốt hơn nhé!
Code của mình :bawling::
Mã:var l,r,d,i:longint; function pp(x:longint):boolean; var s,i:longint; begin s:=1; for i:=2 to trunc(sqrt(x)) do if x mod i=0 then begin s:=s+i; if i<>(x div i) then s:=s+(x div i); end; if s>x then pp:=true else pp:=false; end; BEGIN read(l,r); d:=0; for i:=l to r do if pp(i) then inc(d); write(d); END.
-
03-02-2010, 04:31 AM #2
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 0
bài này trước có trên spoj và thầy mình đã cho làm rồi . Nhưng mỗi tội quên béng mất rồi .
-
03-02-2010, 05:17 AM #3
Silver member
- Ngày tham gia
- Dec 2015
- Bài viết
- 45
Sao lại chỉ được có 60% nhỉ, thuật toán đúng, chắc là do vượt giới hạn.
Theo mình: dựa trên code của bạn nhé, chỗ để tăng s thì thêm 1 if then nữa để kiểm tra, nếu s>x thì dừng luôn việc kiểm tra vs tính ước. 1 điều nữa nên sửa là biến toàn cục với biến địa phương bạn nên dùng khác nhau, nếu để i cùng là biến toàn cục và biến địa phương thì có thể dẫn tới sai xót, và khi kiểm tra lại chương trình cũng khó theo dõi.
-
03-02-2010, 05:26 AM #4
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 3
[IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG] Nếu sai thì ở test nhỏ đã sai rồi. Em nên thử với test lớn để biết mình sai ở chỗ nào!
-
03-02-2010, 06:25 AM #5
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 3
em nghĩ có thể do các test lớn ko chạy đủ thời gian .
-
03-02-2010, 06:29 AM #6
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 0
Mã:const fi=''; fo=''; var f,z:text; nt:array [0..100100] of boolean; uoc:array [0..100100] of longint; a,b,i,j,tam,sum1,sum2,kq:longint; begin assign(f,fi); reset(f); assign(z,fo); rewrite(z); read(f,a,b); for i:=2 to b do begin for j:=2 to b div i do inc(uoc[i*j],i); if (uoc[i]>=i) then inc(sum2); end; for i:=2 to a-1 do if (uoc[i]>=i) then inc(sum1); writeln(z,sum2-sum1); close(z); close(f); end.
-
03-03-2010, 05:06 AM #7
Silver member
- Ngày tham gia
- Jan 2016
- Bài viết
- 6
Chưa chắc test nhỏ đúng mà test lớn đã đúng đâu, tại vì với test lớn, thời gian sẽ lớn hơn và có thể vượt quá thời gian cho phép, hơn nữa, với test lớn, giá trị các biến sẽ lớn, có thể vượt quá giới hạn kiểu dữ liệu khai báo.
-
03-03-2010, 06:03 AM #8
Silver member
- Ngày tham gia
- Jan 2016
- Bài viết
- 47
Hiện Nguyên đã vượt qua 100% các test, code trên không sai gì cả, chỉ là không qua nổi thời gian chạy. Thêm một câu vào @@:
Mã:if s>x then begin pp:=true; exit; end;
-
03-03-2010, 06:29 AM #9
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 5
10^9 mà e cho 2 for . Chạy sao nổi e [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
-
03-04-2010, 03:22 AM #10
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 5
Gửi bởi hang_vt
Nhiều số lớn chỉ cần chạy đến một số ước nhất định là vượt qua rồi chị.
p/s em không ngờ qua nổi cả 100% :emlaugh:
Xe nâng người Boom lift được Công Ty TNHH Trung thành phân phối chính hãng tại khu vực phía Bắc. Với chi phí đầu tư ban đầu thấp hơn rất nhiều so với các loại xe nâng dầu , xe nâng động cơ loại...
Xe nâng người được trung thành nhập khẩu giá tốt