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.
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
Penjelasan
− Ikuti langkah-langkah di atas untuk menyemak teorem Midy, iaituNilai perpuluhan yang diulang ialah -: 157.1582.
Seperti yang kita lihat, 999,999,999 ialah rentetan 9 yang membuktikan teorem Midi.
ul>Input
−int a_num = 49, int p_den = 7Nilai berangka , kerana 49 betul-betul boleh dibahagikan dengan 7. Oleh itu, output ialah "tiada perpuluhan berulang".
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.
#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; }
Repeating decimals are: 052631578947368421 Proved Midy's theorem
Atas ialah kandungan terperinci Dalam C++, teorem Midy. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!