Trung Quân
  • Node.js
  • ReactJS
    • Learn React Hooks
  • MERN Stack
  • Thuật Toán
  • Công Nghệ
    • Amazon AWS
    • Hosting – Domain
  • Về Tác Giả
  • Bản Quyền
Top Posts
Lộ trình học lập trình Web từ con...
Nhận diện, xác thực khuôn mặt với ReactJS...
Tạo hiệu ứng thẻ bài Magic với HTML...
NodeJS viết API gửi Email với OAuth2 và...
Tạo hiệu ứng Parallax đơn giản chỉ với...
Git – GitHub • Học Git thực tế...
Tạo một trang GitHub Profile phiên bản vũ...
Cài đặt iTerm2, Oh My Zsh, Zsh-autosuggestions và...
Cài đặt NVM, NodeJS và GIT trên MacOS...
Thuật toán Tìm phần tử bị lặp đầu...

Trung Quân

  • Node.js
  • ReactJS
    • Learn React Hooks
  • MERN Stack
  • Thuật Toán
  • Công Nghệ
    • Amazon AWS
    • Hosting – Domain
  • Về Tác Giả
  • Bản Quyền
Common Problems

Ứng dụng web tìm kiếm “cặp số bạn bè” (friend numbers)

by trungquandev June 28, 2016
written by trungquandev June 28, 2016
friend-numbers

Xin chào các bạn, mình là Quân, hôm nay mình sẽ hướng dẫn các bạn code ứng dụng tìm kiếm hay nói cách khác là liệt kê các “cặp số bạn bè”.

Nói đến đây chắc nhiều bạn chưa biết “số bạn bè” <=> friend numbers là gì, mình sẽ giải thích, đơn giản thôi, hai số được gọi là một cặp số bạn bè khi và chỉ khi tổng tất cả các ước của số này bằng chính số kia và ngược lại.

Ví dụ ta có 2 số a và b, số a có tất cả 10 ước chẳng hạn thì cộng 10 ước đó lại nếu tổng bằng số b, và ngược lại nếu b có 9 ước chẳng hạn, cộng 9 ước đó lại tổng bằng số a. Thì 2 số a và b là một cặp friend numbers.

Hình dung đề bài:

-Sau khi giải thích số bạn bè là gì rồi chắc nhiều bạn đã có ý tưởng về thuật toán…bạn nào chưa brain storm được thì đọc tiếp nhé :))

-Thuật toán đơn giản gồm 2 bước viết thuật toán và 1 bước viết form:

  • B1: Xây dựng một hàm tính tổng các ước của một số nguyên.
  • B2: Xây dựng hàm liệt kê ra các cặp số bạn bè
  • B3: Viết form để nhập số giới hạn và code xử lý dữ liệu phía trên form
  • B4: Run thôi…

Xử Lý Bài Toán Nào:

B1: Hàm tính tổng các ước của một số nguyên

function tong_uoc_cua_mot_so_nguyen_da_toi_uu($so) {
  $tong_uoc = 1;
  $can = sqrt($so);
  for ($i = 2; $i <= $can; $i++) {
    if (($so % $i) == 0) {
      $tong_uoc = ($tong_uoc + $i + ($so / $i));
    }
  }
  return $tong_uoc;
}
/* Giải thích: -Tổng quan: Dùng vòng lặp từ 2 đến căn bậc 2 của số nguyên đã cho, kiểm tra cứ nếu có một ước của số nguyên đó thì sẽ cộng tổng tất cả các ước đó lại - Tạo một biến để lưu tổng các ước và gán cho nó giá trị là 1 luôn, vì 1 luôn là ước của mọi số bất kỳ. - Duyệt vòng lặp từ 2 đến căn của số nguyên, nếu số nguyên đó chia hết cho $i thì $i chính là ước của số nguyên đó. - Cuối cùng là tính giá trị tổng ước và trả về tổng ước. - Chú ý khi $i là một ước thì kết quả phép chia của số nguyên cho $i cũng sẽ là ước của số nguyên đó. */

B2: Hàm liệt kê cặp số bạn bè

function xac_dinh_so_be_ban_da_toi_uu($limit) {
  $result = '';
  for ($i = 2; $i <= $limit; $i++) {
    $j = tong_uoc_cua_mot_so_nguyen_da_toi_uu($i);
    if ($j <= $limit && tong_uoc_cua_mot_so_nguyen_da_toi_uu($j) == $i && $j > $i)
      $result = $result.$i.
    ' và '.$j.
    '<br>';
  }
}
return $result;
}
/*
Giải Thích:
- Tổng quan, sau khi ta đã có hàm tính tổng ước ở trên, giờ ta chỉ việc kiểm tra 
  xem tổng ước của một số i có bằng số j hay không và ngược lại, nếu bằng thì gán 
  giá trị đó vào chuỗi kết quả $result.

- Khởi tạo biến $result để lưu kết quả ở dạng chuỗi (String)
- Duyệt vòng lặp để chạy biến $i từ 2 cho đến số giới hạn
- Tạo biến $j và gán cho $j giá trị bằng tổng tất cả các ước của số $i
- Kiểm tra 3 điều kiện ràng buộc && đó là:
   + Biến $j phải nhỏ hơn số giới hạn.
   + Tổng tất cả các ước của $j phải bằng $i
   + Và $j phải lớn hơn $i để in ra được 2 số khác nhau
- Sau khi kiểm tra nếu thỏa mãn 3 điều kiện trên thì sẽ gán 2 số $i và $j 
  vào chuỗi kết quả. $i và $j chính là một cặp số bạn bè.
- Cuối cùng là trả về chuỗi kết quả $result
*/

B3: Viết form để nhập số giới hạn và code xử lý số giới hạn

<?php
if(isset($_POST["ok"])) {
  $limit = $_POST["limit"];
  $ketqua = xac_dinh_so_be_ban_da_toi_uu($limit);
  echo $ketqua;
}
?>
<form action="đường dẫn đến file code của bạn" method="post" enctype="multipart/form-data">
 Nhập số giới hạn: <input type="number" name="limit" value="" />
         <input type="submit" value="Tìm Kiếm" name="ok" />
</form>
/*
 Giải thích code:
-Ta sẽ tạo một form để nhập số giới hạn, chú ý trong dấu ngoặc kép chỗ action là đường dẫn
 đến file code của bạn, ví dụ của mình là sobeban.php
 
-Thẻ input type = "number" để nhập giá trị mà ta giới hạn; có name = "limit"
-Thẻ input type = "submit" để nhấn yêu cầu tìm kiếm, name = "ok"
 
-Sau khi nhấn nút tìm kiếm, đoạn code php ở bên trên form sẽ kiểm tra xem bạn đã nhấn nút
 tìm kiếm hay chưa (dùng hàm isset). Nếu tồn tại $_POST["ok"] nghĩa là bạn đã nhấn thì
 sẽ lấy giá trị $_POST["limit"] gửi lên từ thẻ input và gán vào biến $limit.
 
-Chạy hàm liệt kê xac_dinh_so_be_ban_da_toi_uu($limit) và gán kết quả vào biến $ketqua
-Cuối cùng là hiển thị chuỗi kết quả đó ra: echo $ketqua;
*/

B4: Chạy bài làm của mình và xem kết quả thu được sau một mớ thời gian code đau đầu thôi =)).

Bạn nào muốn giao diện ứng dụng đẹp như hình ở trên thì có thể dowload source code của mình về tham khảo, phần giao diện html-css mình không hướng dẫn vì đó là những kiến thức căn bản, bạn nào muốn học thì cứ search gg, nhiều lắm :))

Còn nữa, ở phần trên, tên các hàm mình có viết là đã tối ưu, có nghĩa là nhiều bạn sẽ rất dễ mắc phải lối mòn code cơ bản không tư duy nhiều, như vậy code sẽ không thể chạy nhanh được, các bạn có thể dowload source code dưới đây của mình về xem sẽ rõ. Trong file code mình cũng có giải thích khá kỹ.

Source code: Github: List Friend Numbers

Done.

Nếu có gì thắc mắc hoặc cần hỏi, bạn có thể comment dưới Bài Viết này hoặc Liên Hệ với mình, mình sẽ trả lời bạn sớm nhất. Cảm ơn các bạn và hẹn gặp lại các bạn ở những bài hướng dẫn tiếp theo.

Best Regards – Trung Quân

Khóa học lập trình làm việc thực tế:

Nếu các bạn thấy bài viết của mình có ích thì hãy ủng hộ mình bằng cách tham khảo bài viết giới thiệu khóa học lập trình MERN Stack Miễn Phí cực kỳ chất lượng và chính chủ dưới đây của mình nhé, cảm ơn các bạn ^^
KHOÁ HỌC LẬP TRÌNH MERN STACK 100% DỰ ÁN THỰC TẾ và CHẤT LƯỢNG
mern-stack-course-trungquandev
0 comment
0
FacebookTwitterGoogle +Pinterest
trungquandev

previous post
Ứng dụng web chuyển năm dương lịch bất kỳ sang âm lịch
next post
Tổng Quan Về Laravel Một Framework Khá Mạnh Mẽ

Related Posts

Cấu hình bộ phát wifi TP-Link cho gia...

November 23, 2018

Hướng dẫn build một con Facebook Messenger Bot...

January 19, 2017

Tản mạn về cái tên “Lập trình viên...

March 25, 2018

Hướng dẫn đăng ký chống DDoS với Google...

January 14, 2017

Hiểu sâu về JWT – JSON Web Tokens

September 15, 2019

NodeJS xác thực người dùng sử dụng JWT...

October 16, 2019

Ứng dụng web liệt kê danh sách số...

June 3, 2016

Framework và CMS khác nhau như thế nào?...

September 3, 2017

Hướng Dẫn Import Database Trong phpmyadmin

April 18, 2016

Ứng dụng web liệt kê “n” số nguyên...

May 30, 2016

Bát Chánh Đạo

batchanhdao-trungquandev

About Me

About Me

Trung Quân

Software Engineer at Pod Foods

Academy Of Cryptography Techniques

"I am a dog and cat lover, love green, love to read books, write blog and oil painting ..."

Read my CV → https://cv.trungquandev.com/

My Maxim Live

A bit of fragrance clings to the hand that gives flowers!

For Vietnamese young generation

Đừng bao giờ làm người khổng lồ trong tư tưởng nhưng chỉ là thằng lùn trong hành động.

Keep in touch

Facebook Instagram Linkedin Youtube Email Github

Fanpage Facebook

Facebook

Học lập trình “MERN Stack Cơ Bản” qua ứng dụng thực tế

mern-stack-trello-app-trungquandev


  Khóa học lập trình MERN Stack (NodeJS, ReactJS, ExpressJS, MongoDB) cực kỳ chất lượng và Miễn Phí do chính mình hướng dẫn nhé:
  MERN Stack - xây dựng ứng dụng quản lý công việc dạng Kanban tương tự Trello.

Học lập trình “MERN Stack Nâng Cao” qua ứng dụng thực tế

mern-stack-advanced-trello-app-trungquandev


  * Học lập trình MERN Stack Nâng Cao (NodeJS, ReactJS, ExpressJS, MongoDB). Đây là một khóa học mà mình đã làm cực kỳ tâm huyết, với phong cách dạy lập trình làm dự án thực tế, chuyên nghiệp. Để các bạn có một hành trang kiến thức vững chắc cho hành trình làm lập trình viên trong tương lai nhé.
  Lập Trình MERN Stack Nâng Cao - Học Thực Tế Để Đi Làm

YouTube: Trungquandev Official

youtube-channel-trungquandev-official


  - Các bạn tham khảo kênh YouTube chính thức của mình và ủng hộ mình bằng cách tặng mình một lượt Đăng Ký Kênh nha.
Cảm ơn các bạn ^^

  YouTube: TRUNGQUANDEV OFFICIAL

© Copyright

Bản quyền:
  © DMCA (Digital Millennium Copyright Act)


DMCA.com Protection Status

License

Giấy phép nội dung:
  Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 Quốc tế.


Giấy phép Creative Commons

Other links

Portfolio của mình:
  https://cv.trungquandev.com

Lập trình cuộc sống:
  https://laptrinhcuocsong.com

Nhiều bài viết hay về javascript:
  https://codetheworld.io

  • Facebook
  • Youtube
  • GitHub
  • Linkedin
  • Instagram

@2022 - trungquandev.com. Since 2016 - All Right Reserved. Developed by Trung Quân Dev