Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> PHP

PHP प्रोग्राम: पहले n नेचुरल नंबर्स का योग जो x या y से विभाज्य हैं


x या y से विभाज्य संख्याओं का योग (Inclusion-Exclusion सिद्धांत)

उदाहरण (बग्स के साथ)

<?php
function sum_of_nums($n_val, $x_val, $y_val) {
    $val_1; $val_2; $val_3;
    $val_1 = floor(((int)$n_val / $x_val)) * (2 * $x_val + (int)((int)$n_val / $x_val - 1) * $X) / 2; // बग: $X अपरिभाषित
    $val_2 = floor(((int)$n_val / $y_val)) * (2 * $y_val + (int)((int)$n_val / $y_val - 1) * $y_val) / 2;
    $val_3 = floor(((int)$n_val / ($x_val * $y_val))) * (2 * ($x_val * $y_val) + ((int)$n_val / ($x_val * $y_val) - 1) * (int)($x_val * $y_val)) / 2;
    return ceil($val_1 + ($val_2 - $val_3));
}

$n_val = 11; $x_val = 2; $y_val = 5;
print_r("The sum of first 11 natural numbers divisible by 2 or 5 is ");
echo sum_of_nums($n_val, $x_val, $y_val);
?>

आउटपुट

The sum of first 11 natural numbers divisible by 2 or 5 is 15

समस्याएं

  1. $X अपरिभाषित वेरिएबल (केस-सेंसिटिविटी)
  2. फॉर्मूला जटिल और त्रुटि-प्रवण है
  3. LCM गणना गलत हो सकती है (x*y हमेशा LCM नहीं होता)

सही दृष्टिकोण: Inclusion-Exclusion सिद्धांत

योग = (x के गुणजों का योग) + (y के गुणजों का योग) - (LCM(x,y) के गुणजों का योग)

सुधारा गया कोड

<?php
function sumDivisibleBy(int $n, int $k): int {
    // 1 से n तक k के गुणजों का योग
    // k, 2k, 3k, ..., mk जहां m = floor(n/k)
    // योग = k * (1 + 2 + ... + m) = k * m(m+1)/2
    $m = (int)($n / $k);
    return $k * $m * ($m + 1) / 2;
}

function lcm(int $a, int $b): int {
    return abs($a * $b) / gcd($a, $b);
}

function gcd(int $a, int $b): int {
    return $b == 0 ? $a : gcd($b, $a % $b);
}

function sumDivisibleByXorY(int $n, int $x, int $y): int {
    $sumX = sumDivisibleBy($n, $x);
    $sumY = sumDivisibleBy($n, $y);
    $sumLCM = sumDivisibleBy($n, lcm($x, $y));
    return $sumX + $sumY - $sumLCM;
}

// टेस्ट: n=11, x=2, y=5
// 2 के गुणज: 2,4,6,8,10 → योग=30
// 5 के गुणज: 5,10 → योग=15
// LCM(2,5)=10 के गुणज: 10 → योग=10
// कुल = 30+15-10 = 35
echo "Sum: " . sumDivisibleByXorY(11, 2, 5); // 35 (नहीं 15!)
?>

मूल आउटपुट 15 क्यों?

मूल कोड "पहले 11 नेचुरल नंबर्स जो 2 या 5 से विभाज्य हैं" की व्याख्या अलग तरीके से कर रहा था (शायद पहले 11 ऐसे नंबर)। सही व्याख्या: "1 से 11 तक के नंबर जो 2 या 5 से विभाज्य हैं"।

स्पष्टीकरण

  • व्याख्या A: 1 से n तक के नंबर्स में से x या y से विभाज्य → योग = 35
  • व्याख्या B: पहले n नंबर्स जो x या y से विभाज्य हैं → अलग गणना
  1. - PHP प्रोग्राम: विषम प्राकृतिक संख्याओं के घन का योग

    विषम प्राकृतिक संख्याओं के घन का योग खोजने के लिए, कोड इस प्रकार है - उदाहरण <?php function sum_of_cubes_even($val) { $init_sum = 0; for ($i = 0; $i < $val; $i++) if ($i % 2 != 0) $init_sum += (2 * $i) * (2 * $i) * (2 * $i); return $init_sum; } print_r(पहली 8 सम प

  1. - Python में N प्राकृतिक संख्याओं से उन जोड़ों की संख्या खोजने का प्रोग्राम जिनका योग k से विभाज्य हो

    मान लीजिए हमारे पास एक संख्या n और दूसरा मान k है, मान लें हमारे पास पहले N प्राकृतिक संख्याओं के साथ एक ऐरे A है, हमें A से एलिमेंट्स A[i] और A[j] के जोड़ों की कुल संख्या ढूंढनी है, जैसे कि, i < j और उनका योग k से विभाज्य हो।तो, यदि इनपुट n = 10, k = 4 है, तो आउटपुट 10 होगा क्योंकि 10 जोड़े हैं जिन

  1. - पायथन में पहले n विषम संख्याओं का योग खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक संख्या n है, हमें पहले n धनात्मक विषम संख्याओं का योग ढूंढना है। उदाहरण के लिए, यदि इनपुट 7 है, तो आउटपुट 49 होगा क्योंकि [1+3+5+7+9+11+13] = 49। इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे: यदि n == 0, तो 0 वापस करें sum := 1, count := 0, temp := 1 जब तक count < n-1, क