yueyufeng 发表于 2023-11-14 12:54:41

对每项求模,这个代码计算前面对,后面结果不对

isdkz 发表于 2023-11-14 12:54:47

这段代码中存在一个问题,即在计算第n项时,对前面项的值没有进行取模操作,导致可能出现溢出或错误的结果。应该在每次计算n3时都对结果进行取模操作,而不仅仅是在返回结果时才进行取模。

以下是修改后的代码:

#include <stdio.h>
#include <math.h>

int lml(int n) {
    int n1 = 0, n2 = 1, n3;
    for (int i = 3; i <= n; i++) {
      n3 = (4 * n2 - 5 * n1) % 998244353;
      n1 = n2;
      n2 = n3;
    }
    return n3;
}

int main() {
    int T;
    scanf("%d", &T);
    for (int i = 1; i <= T; i++) {
      int num;
      scanf("%d", &num);
      printf("%d\n", (lml(num) + 998244353) % 998244353);
    }
    return 0;
}


这样修改后的代码在计算每一项时都会对结果进行取模操作,保证了结果的正确性。
页: [1]
查看完整版本: 对每项求模,这个代码计算前面对,后面结果不对