Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การหารหน่วยซ้ำโดยใช้ C++


ในบทความนี้ เราจะพูดถึงการหาจำนวนหน่วยที่ซ้ำกันหารด้วย N หน่วยที่ซ้ำกันคือจำนวนซ้ำของ 1 เท่านั้น ให้ R(k) เป็นหน่วยซ้ำ โดยที่ k คือความยาวของ 1 เช่น R(4) =1111 ดังนั้นเราต้องหาจำนวนขั้นต่ำของ k ที่ R(k) หารด้วย N ลงตัว ตัวอย่างเช่น −

Input : N = 13
Output : k = 6
Explanation : R(6) i.e 111111 is divisible by 13.

Input : N = 31
Output : k = 15

แนวทางในการหาทางออก

คุณสามารถแก้ไขปัญหานี้ได้โดยการตรวจสอบแต่ละค่าของ k โดยเริ่มจาก 1 โดยที่ R(k) หารด้วย N ลงตัว แต่ด้วยวิธีแก้ปัญหานี้ เราจะไม่พบว่า N หารด้วยค่าของ R(k) ใดๆ ลงตัวหรือไม่ นี่จะทำให้โปรแกรมซับซ้อนเกินไปและอาจใช้งานไม่ได้เช่นกัน

แนวทางที่มีประสิทธิภาพสำหรับการแก้ปัญหาของโปรแกรมนี้คือ

  • ตรวจสอบว่า N เป็น coprime กับ 10 หรือไม่
  • ถ้าไม่ใช่ ดังนั้น R(k) จะไม่หารด้วย N สำหรับค่าใดๆ ของ k
  • ถ้าใช่ ดังนั้นสำหรับแต่ละหน่วยที่ซ้ำกัน R(1), R(2), R(3)... และอื่นๆ ให้คำนวณส่วนที่เหลือของการหารของ R(i) และ N ดังนั้นจะมี n จำนวนส่วนที่เหลือ
  • หาค่าที่เหลือเท่ากันสำหรับ R(i) และ R(j) โดยที่ R(i) และ R(j) เป็นหน่วยที่ซ้ำกันสองหน่วยเพื่อให้ R(i) - R(j) หารด้วย N
  • aผลต่างของ R(i) และ R(j) จะถูกทำซ้ำหน่วยคูณด้วยกำลัง 10 แต่ 10 และ N เป็นจำนวนเฉพาะ ดังนั้น R(k) จะหารด้วย N.

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;

int main() {
   int N = 31;
   int k = 1;
   // checking if N is coprime with 10.
   if (N % 2 == 0 || N % 5 == 0){
      k = 0;
   } else {
      int r = 1;
      int power = 1;
      // check until the remainder is divisible by N.
      while (r % N != 0) {
         k++;
         power = power * 10 % N;
         r = (r + power) % N;
      }
   }
   cout << "Value for k : "<< k;
   return 0;
}

ผลลัพธ์

Value for k : 15

บทสรุป

ในบทความนี้ เราจะพูดถึงการหาค่าของ k สำหรับ R(k) โดยที่ R(k) เป็นหน่วยที่ซ้ำกันที่หารด้วย N ได้ เราพูดถึงวิธีคิดในแง่ดีในการหาค่าของ k นอกจากนี้เรายังกล่าวถึงรหัส C ++ เพื่อแก้ปัญหานี้ คุณสามารถเขียนโค้ดนี้ในภาษาอื่นๆ เช่น Java, C, Python เป็นต้น เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์