# GÓC SÁNG TẠO > Khu vực lập trình > Pascal/Delphi/Kylix >  Số phong phú!

## thoinay

Đề 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::


```
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.
```

----------


## quy263

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 .

----------


## cucre26

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.

----------


## vthao93hp

[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!

----------


## 513minh89

em nghĩ có thể do các test lớn ko chạy đủ thời gian .

----------


## hangdambao00

```
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.
```

Em thử code này thử xem! [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

----------


## NgocAnhs

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.

----------


## tuylasg

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 @@:


```
if s>x then
   begin
           pp:=true;
           exit;
  end;
```

----------


## quocbaonh08

*10^9 mà e cho 2 for . Chạy sao nổi e [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
*

----------


## evashopping

> *10^9 mà e cho 2 for . Chạy sao nổi e [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]*


 Chạy không nổi thật, nhưng nhờ câu code trên đã vượt qua test một cách "không đầy đủ lắm" (hơi ăn gian về phần chạy).
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:

----------


## vudinh

Đối với bài này chỉ có cách đó thôi mà, mình nghĩ không có cách nào khác, vấn đề quan trọng là giải quyết như nào với số lớn mà thôi.

----------


## vanvuive

Anh Happy Sòtt group với chị hang_vt cho em xin nick Yahoo đi. Em muốn hỏi vài cái. Em cám ơn trước nha.

----------


## tranhuytn668

> Anh *HappySoftGroup* với chị *hang_vt* cho em xin nick Yahoo đi. Em muốn hỏi vài cái. Em cám ơn trước nha.


Nếu bạn có vấn đề gì khó khăn thì nên post bài để hỏi và các mem cùng giúp đỡ. Vì anh với chị hang_vt cũng có công việc riêng nên ít khi rảnh. Vì thế, tốt nhất là post bài lên, đến lúc rãnh thì anh và chị hang_vt và nhiều mem, mod khác sẽ giúp bạn. 
Bạn đừng lo lắng, mọi người đều nhiệt tình giúp đỡ lẫn nhau.
Chúc bạn thành công!

----------


## thaichautsm

hang_vt gia nhập nhóm HSG rồi mà, bạn cứ liên hệ với nhóm HSG là ok. Không thì post bài lên để các mem khác cùng học hỏi kinh nghiệm.

----------

