/** * Copyright (C) 2014-2020 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Content { public static function execute( $params ) { // Set archive bytes offset if ( isset( $params['archive_bytes_offset'] ) ) { $archive_bytes_offset = (int) $params['archive_bytes_offset']; } else { $archive_bytes_offset = ai1wm_archive_bytes( $params ); } // Set file bytes offset if ( isset( $params['file_bytes_offset'] ) ) { $file_bytes_offset = (int) $params['file_bytes_offset']; } else { $file_bytes_offset = 0; } // Set content bytes offset if ( isset( $params['content_bytes_offset'] ) ) { $content_bytes_offset = (int) $params['content_bytes_offset']; } else { $content_bytes_offset = 0; } // Get processed files size if ( isset( $params['processed_files_size'] ) ) { $processed_files_size = (int) $params['processed_files_size']; } else { $processed_files_size = 0; } // Get total content files size if ( isset( $params['total_content_files_size'] ) ) { $total_content_files_size = (int) $params['total_content_files_size']; } else { $total_content_files_size = 1; } // Get total content files count if ( isset( $params['total_content_files_count'] ) ) { $total_content_files_count = (int) $params['total_content_files_count']; } else { $total_content_files_count = 1; } // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_content_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving %d content files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_content_files_count, $progress ) ); // Flag to hold if file data has been processed $completed = true; // Start time $start = microtime( true ); // Get content list file $content_list = ai1wm_open( ai1wm_content_list_path( $params ), 'r' ); // Set the file pointer at the current index if ( fseek( $content_list, $content_bytes_offset ) !== -1 ) { // Open the archive file for writing $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Set the file pointer to the one that we have saved $archive->set_file_pointer( $archive_bytes_offset ); // Loop over files while ( list( $file_abspath, $file_relpath, $file_size, $file_mtime ) = fgetcsv( $content_list ) ) { $file_bytes_written = 0; // Add file to archive if ( ( $completed = $archive->add_file( $file_abspath, $file_relpath, $file_bytes_written, $file_bytes_offset ) ) ) { $file_bytes_offset = 0; // Get content bytes offset $content_bytes_offset = ftell( $content_list ); } // Increment processed files size $processed_files_size += $file_bytes_written; // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_content_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving %d content files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_content_files_count, $progress ) ); // More than 10 seconds have passed, break and do another request if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break; } } } // Get archive bytes offset $archive_bytes_offset = $archive->get_file_pointer(); // Truncate the archive file $archive->truncate(); // Close the archive file $archive->close(); } // End of the content list? if ( feof( $content_list ) ) { // Unset archive bytes offset unset( $params['archive_bytes_offset'] ); // Unset file bytes offset unset( $params['file_bytes_offset'] ); // Unset content bytes offset unset( $params['content_bytes_offset'] ); // Unset processed files size unset( $params['processed_files_size'] ); // Unset total content files size unset( $params['total_content_files_size'] ); // Unset total content files count unset( $params['total_content_files_count'] ); // Unset completed flag unset( $params['completed'] ); } else { // Set archive bytes offset $params['archive_bytes_offset'] = $archive_bytes_offset; // Set file bytes offset $params['file_bytes_offset'] = $file_bytes_offset; // Set content bytes offset $params['content_bytes_offset'] = $content_bytes_offset; // Set processed files size $params['processed_files_size'] = $processed_files_size; // Set total content files size $params['total_content_files_size'] = $total_content_files_size; // Set total content files count $params['total_content_files_count'] = $total_content_files_count; // Set completed flag $params['completed'] = $completed; } // Close the content list file ai1wm_close( $content_list ); return $params; } } Cấp số nhân là gì? Công thức cấp số nhân - Vay Tài Chính 247

Cấp số nhân là gì? Công thức cấp số nhân

Định nghĩa cấp số nhân

Cấp số nhân là một dãy số mà mỗi số tiếp theo bằng tích của số trước đó với một hằng số cố định. Cụ thể, nếu {a_n} là một cấp số nhân thì ta có:

a_n = a_1 r^(n-1)

Trong đó, a_1 là số đầu tiên của dãy, r là hằng số được gọi là công số hay lý do của cấp số nhân, n là vị trí của số trong dãy.

Tính chất của cấp số nhân

Cấp số nhân có một số tính chất đặc trưng sau:

  • Các số liên tiếp trong cấp số nhân luôn có tỷ số bằng nhau và bằng công số r. Ví dụ: a_2/a_1 = a_3/a_2 = r
  • Cấp số nhân luôn tăng hoặc giảm dần tùy thuộc vào giá trị tuyệt đối của công số r. Nếu |r| > 1 thì cấp số tăng, ngược lại nếu |r| < 1 thì cấp số giảm.
  • Tổng của n số đầu tiên trong cấp số nhân bằng a_1(r^n – 1)/(r – 1).

Công thức cấp số nhân

Công thức tổng quát để tìm số thứ n trong cấp số nhân {a_n} như sau:

a_n = a_1 * r^(n-1)

Trong đó:

  • a_1: Số đầu tiên của dãy
  • r: Công số (lý do)
  • n: Vị trí của số trong dãy

Để tìm tổng S_n của n số đầu tiên trong dãy, ta có:

S_n = a_1 * (r^n – 1)/(r – 1)

Công thức này được suy ra từ tính chất của cấp số nhân.

Một số ví dụ về cấp số nhân

Dưới đây là một số ví dụ về cấp số nhân:

  • Dãy 2, 4, 8, 16, 32, 64… là một cấp số nhân với a_1 = 2, r = 2
  • Dãy 5, 25, 125, 625… là một cấp số nhân với a_1 = 5, r = 5
  • Dãy 4096, 2048, 1024, 512, 256… là một cấp số nhân với a_1 = 4096, r = 1/2
  • Dãy 1, -3, 9, -27, 81… là một cấp số nhân với a_1 = 1, r = -3

Như vậy, cấp số nhân rất đa dạng, tùy thuộc vào số đầu tiên a_1 và công số r.

Sự khác nhau giữa cấp số nhân và cấp số cộng

So với cấp số cộng, cấp số nhân có một số điểm khác biệt:

  • Trong cấp số cộng, mỗi số bằng số trước cộng với một hằng số cố định d. Trong khi đó trong cấp số nhân, mỗi số bằng số trước nhân với một hằng số cố định r.
  • Cấp số cộng tăng hoặc giảm đều, trong khi cấp số nhân thay đổi nhanh hơn theo cấp số nhân.
  • Tổng n số đầu của cấp số cộng được tính bằng công thức S_n = n*(a_1 + a_n)/2. Tổng của cấp số nhân được tính bằng công thức khác.
  • Cấp số nhân thường được dùng để mô tả các hiện tượng tăng/giảm theo cấp số, trong khi cấp số cộng mô tả sự thay đổi đều.

Ứng dụng của cấp số nhân

Cấp số nhân có nhiều ứng dụng thực tế:

  • Tính lãi kép: số tiền gửi ngân hàng tăng theo cấp số nhân với lãi suất là công số.
  • Mô tả sự gia tăng dân số theo thời gian.
  • Tính khối lượng công việc tăng lên khi thêm người làm.
  • Phóng to hoặc thu nhỏ hình ảnh, âm thanh theo tỷ lệ cố định.
  • Mô tả sự lây lan của virus, vi khuẩn.
  • Tính diện tích bề mặt và thể tích của các hình cầu, hình trụ…

Như vậy, cấp số nhân là một công cụ toán học hữu ích trong nhiều ứng dụng thực tế. Hiểu rõ công thức và tính chất của nó sẽ giúp chúng ta ứng dụng cấp số nhân một cách hiệu quả.


Bài được vaytaichinh247.net tổng hợp từ nhiều nguồn khác nhau cho bạn đọc tham khảo.