Computer >> Máy Tính >  >> Lập trình >> C ++

Định lý Midy trong C ++

Chúng ta được cung cấp các giá trị nguyên là a_num sẽ lưu trữ tử số và p_den sẽ lưu trữ mẫu số phải là một số nguyên tố. Nhiệm vụ là kiểm tra xem các phép toán được thực hiện trên a_num sau khi chia với p_den có chứng minh được định lý midy’s hay không.

Các bước chứng minh định lý Midy là-

  • Nhập tử số dưới dạng a_num và mẫu số là p_den phải luôn là giá trị nguyên tố.

  • Chia các số. Kiểm tra các giá trị thập phân lặp lại.

  • Lưu trữ các giá trị thập phân cho đến khi chúng không lặp lại.

  • Kiểm tra xem các chữ số có chẵn không, nếu có, sau đó chia chúng thành một nửa

  • Thêm cả hai số. Nếu đầu ra là một chuỗi 9 thì nó chứng minh định lý Midy.

Hãy cho chúng tôi xem các tình huống đầu ra đầu vào khác nhau cho việc này -

Trong - int a_num =1 và int p_den =19

Hết - Các số thập phân lặp lại là:052631578947368421 Chứng minh định lý Midy

Giải thích - Thực hiện theo các bước được đề cập ở trên để kiểm tra định lý Midy, tức là

  • Chia 1/19 =052631578947368421

  • Các giá trị thập phân lặp lại là-:052631578947368421.

  • Chia các chữ số thành một nửa, tức là 052631578 947368421.

  • Thêm cả hai nửa, tức là 052631578 + 947368421 =999.999.999.

  • Như chúng ta có thể thấy, 999,999.999 là chuỗi 9 chứng minh định lý Midy.

Trong −int a_num =49, int p_den =7

Hết - Không có số thập phân lặp lại

Giải thích - Như chúng ta có thể thấy 49/7 không tạo ra giá trị thập phân nào vì 49 hoàn toàn chia hết cho 7. Vì vậy, kết quả đầu ra là Không có số thập phân lặp lại.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập giá trị số nguyên dưới dạng int a_num và int p_den.

  • Gọi hàm là Midys_theorem (a_num, p_den) để chứng minh định lý Midy.

  • Bên trong hàm check_Midys ()

    • Tạo các biến dưới dạng int đầu tiên đến 0 và int cuối cùng đến 0

    • Kiểm tra NẾU kiểm tra hàm (val) trả về FALSE thì in ra định lý Midy’s không áp dụng được.

    • ELSE IF len% 2 =0 sau đó bắt đầu vòng lặp FOR từ i đến 0 cho đến khi tôi nhỏ hơn len / 2 và đặt đầu tiên thành đầu tiên * 10 + (str [i] - '0') và cuối cùng đến cuối cùng * 10 + (str [ len / 2 + i] - '0') và in chứng minh định lý Midy.

  • ELSE, in định lý Midy’s không áp dụng được.

  • Bên trong hàm Midys_theorem (int a_num, int p_den)

    • Tạo một biến loại bản đồ để ánh xạ các giá trị kiểu số nguyên dưới dạng map_val và xóa bản đồ.

    • Đặt lời nhắc là a_num% p_den.

    • Bắt đầu trong khi lời nhắc không bằng 0 VÀ map_val.find (lời nhắc) bằng với map_val.end () sau đó đặt map_val [lời nhắc] thành result.length (), lời nhắc thành lời nhắc * 10, tạm thời thành lời nhắc / p_den, kết quả thành kết quả + to_string (tạm thời) và lời nhắc đến lời nhắc% p_den.

    • Kiểm tra IF còn lại =0 rồi trả về -1 ELSE, đặt số lượng toresult.substr (map_val [nhắc nhở])

    • Số lần trả lại

  • Bên trong kiểm tra hàm bool (int val)

    • Bắt đầu vòng lặp FOR từ i đến 2 cho đến khi tôi nhỏ hơn val / 2. Kiểm tra IF val% i =0 rồi trả về FALSE nếu không trả về TRUE.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
bool check(int val){
   for(int i = 2; i <= val / 2; i++){
      if(val % i == 0){
         return false;
      }
   }
   return true;
}
void check_Midys(string str, int val){
   int len = str.length();
   int first = 0;
   int last = 0;

   if(!check(val)){
      cout<<"\nNot applicable for Midy's theorem";
   }
   else if(len % 2 == 0){
      for(int i = 0; i < len / 2; i++){
         first = first * 10 + (str[i] - '0');
         last = last * 10 + (str[len / 2 + i] - '0');
      }
      cout<<"\nProved Midy's theorem";
   }
   else{
      cout<<"\nNot applicable for Midy's theorem";
   }
}
string Midys_theorem(int a_num, int p_den){
   string result;
   map<int, int> map_val;
   map_val.clear();

   int reminder = a_num % p_den;

   while((reminder != 0) && (map_val.find(reminder) == map_val.end())){
      map_val[reminder] = result.length();
      reminder = reminder * 10;
      int temp = reminder / p_den;
      result += to_string(temp);
      reminder = reminder % p_den;
   }
   if(reminder == 0){
      return "-1";
   }
   else{
      string count = result.substr(map_val[reminder]);
      return count;
   }
}
int main(){
   int a_num = 1;
   int p_den = 19;
   string result = Midys_theorem(a_num, p_den);
   if(result == "-1"){
      cout<<"No Repeating Decimal";
   }
   else{
      cout<<"Repeating decimals are: "<<result;
      check_Midys(result, p_den);
   }
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra Kết quả sau

Repeating decimals are: 052631578947368421
Proved Midy's theorem