我們得到整數值a_num,它將儲存分子和p_den,它將儲存應該是素數的分母。任務是檢查a_num除以p_den後的運算是否證明了midy定理。
輸入分子為 a_num,分母為 p_den,應始終為質數。
將數字相除。檢查重複的小數值。
儲存小數值,直到它們不重複。
檢查數字是否重複甚至,如果是,則將它們分成兩半
將兩個數字相加。如果輸出是一個 9 的字串,那麼它證明了 Midy 定理。
讓我們來看看這種情況的各種輸入輸出場景-
#In − int a_num = 1 和int p_den = 19
輸出− 重複小數為:052631578947368421 證明了Midy 定理
解釋− 依照上述步驟檢查Midy 定理,即
#除1 / 19 = 052631578947368421
重複的十進位值為-:052631578947368421。
將數字分成兩半,即 052631578 947368421。
將兩者相加兩半即 052631578 947368421 = 999,999,999。
如我們所見,999,999,999 是 9 的字串,它證明了米迪定理。
#輸入 −int a_num = 49,int p_den = 7
#輸出 − 無重複小數
解釋− 如我們所見的,49/7 不會產生小數值,因為49 可以完全被7 整除。因此,輸出為“無重複小數”。
輸入整數值作為int a_num和int p_den。
呼叫函數作為Midys_theorem( a_num, p_den) 來證明 Midy 定理。
在函數check_Midys() 內
#建立變數為int 先到0,int 最後到0
檢查函數check(val) 是否回傳FALSE,然後列印Midy 定理不適用。
ELSE IF len % 2 = 0 然後開始循環FOR 從i 到0 直到i 小於len/2 並將first 設為first * 10 (str[i] - '0' ) 並將last 設為last * 10 (str[len / 2 i] - '0') 並列印證明的Midy 定理。
ELSE,印出Midy 定理不適用.
在函數Midys_theorem(int a_num, int p_den)內部
建立一個map類型變數將整數類型值對應為map_val並清除地圖。
將提醒設為a_num % p_den。
在沒有提醒時開始等於0且map_val.find(reminder)等於map_val.end()然後設定map_val[reminder]為result.length(),reminder為reminder * 10 ,temp為reminder / p_den,result為result to_string(temp)並提醒提醒% p_den。
檢查 IF 餘數 = 0,然後傳回 -1 ELSE,將計數設為 result.substr(map_val[reminder])
傳回計數
#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
以上是在C++中,Midy的定理的詳細內容。更多資訊請關注PHP中文網其他相關文章!