Rumah >pembangunan bahagian belakang >C++ >Dalam C++, teorem Midy

Dalam C++, teorem Midy

WBOY
WBOYke hadapan
2023-09-11 22:57:021373semak imbas

Dalam C++, teorem Midy

Kami mendapat nilai integer a_num yang akan menyimpan pengangka dan p_den yang akan menyimpan penyebut yang sepatutnya menjadi nombor perdana. Tugasnya adalah untuk menyemak sama ada operasi selepas membahagikan a_num dengan p_den membuktikan teorem midy.

Langkah-langkah untuk membuktikan teorem Midy ialah-

  • Pengbilang input ialah a_num dan penyebutnya ialah p_den, yang sepatutnya sentiasa menjadi nombor perdana.

  • Bahagi nombor. Semak nilai perpuluhan berulang.

  • Simpan nilai perpuluhan sehingga ia tidak berulang.

  • Periksa sama ada nombor adalah pendua genap, jika ya maka bahagikannya kepada separuh

  • Tambahkan dua nombor. Jika output adalah rentetan 9, maka ia membuktikan teorem Midy.

Mari kita lihat pelbagai senario input dan output untuk situasi ini -

Dalam − int a_num = 1 dan int p_den = 19

Keluaran

Dalam − int a_num = 1 dan int p_den = 19

    Keluaran
  • Prov. 305 perpuluhan − 105− dalam teorem Midy
  • Penjelasan

    − Ikuti langkah-langkah di atas untuk menyemak teorem Midy, iaitu
  • dibahagi dengan 1 / 19 = 052631578947368421
  • Nilai perpuluhan yang diulang ialah -: 157.1582.
  • Potong nombor pada separuh, iaitu 052631578 947368421.
  • Tambahkan dua bahagian bersama iaitu 052631578 + 947368421 = 999,999,999.

    Seperti yang kita lihat, 999,999,999 ialah rentetan 9 yang membuktikan teorem Midi.

    ul>Input

    −int a_num = 49, int p_den = 7

      Output
    • − Tiada perpuluhan berulang

      dapat dijana
    • Nilai berangka , kerana 49 betul-betul boleh dibahagikan dengan 7. Oleh itu, output ialah "tiada perpuluhan berulang".

    • Kaedah yang digunakan dalam program berikut adalah seperti berikut
      • Masukkan nilai integer sebagai int a_num dan int p_den.
      • Panggil fungsi sebagai Midys_theorem( a_num, p_den) untuk membuktikan teorem Midy.
      • Dalam fungsi check_Midys()
      • Buat pembolehubah sebagai int pertama kepada 0, int kepada 0 pada penghujungnya
    • Semak sama ada fungsi check(val) mengembalikan Midy's FALSE, kemudian theorem print tidak terpakai . . * 10 + (str[len / 2 + i] - '0') dan mencetak teorem Midy yang telah terbukti.

      • SELAINNYA, cetak teorem Midy tidak terpakai
      • Di dalam fungsi Midys_theorem(int a_num, int p_den)
      • menaip peta dalam taipkan peta dan kosongkan. peta.
      • Tetapkan peringatan kepada a_num % p_den.
      • Mula sama dengan 0 apabila tiada peringatan dan map_val.find(reminder) sama dengan map_val.end() kemudian tetapkan map_val[reminder] kepada result.length(), reminder to reminder * 10, temp to reminder /p_den, hasil Untuk hasil + to_string(temp) dan ingatkan % p_den.
      • Semak JIKA baki = 0, kemudian kembalikan -1 LAIN, tetapkan kiraan kepada result.substr(map_val[peringatan])
    • Return count

      • function internal bool check(int val)

    Mula gelung FOR daripada i hingga 2/i ialah Semak JIKA val % i = 0 dan mengembalikan FALSE, jika tidak BENAR.

    Contoh🎜
    #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&#39;s theorem";
       }
       else if(len % 2 == 0){
          for(int i = 0; i < len / 2; i++){
             first = first * 10 + (str[i] - &#39;0&#39;);
             last = last * 10 + (str[len / 2 + i] - &#39;0&#39;);
          }
          cout<<"\nProved Midy&#39;s theorem";
       }
       else{
          cout<<"\nNot applicable for Midy&#39;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;
    }
    🎜Output🎜🎜Jika kita menjalankan kod di atas, ia akan menghasilkan output berikut🎜
    Repeating decimals are: 052631578947368421
    Proved Midy&#39;s theorem
    🎜

Atas ialah kandungan terperinci Dalam C++, teorem Midy. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam