斐波那契数列求和,可能是取模取不对

斐波那契数列,F1=F2=1,从第三项开始,每项等于前两项之和。约定S1=1,Sn<=Fn+1时,Sn+1=Sn+Fn+1,否则Sn+1=Sn-Fn+1。p=1000000007,因为结果可能很大,将计算过程中所有Fn和Sn取模。输入n,输出Sn。
计算规则例如:S6=1+1+2-3+5+8=14。

#include
using namespace std;
int main()
{
long int n;
long int p = 1000000007;
long int count;
long int a = 1;
long int b = 1;
long int sum = 1;
cin >> n;
for (count = 2; count <= n; count++) {
if (sum % p <= b % p) {
sum = sum + b;
} else if (sum % p > b % p) {
sum = sum - b;
}
b = b + a;
a = b - a;
}
cout << sum;
return 0;
}
不知道为什么总是不对,个人认为可能是取模的问题,求指点!🥺🥺


#include <iostream>
using namespace std;
 
int main()
{
    long long a[50],s=0;
    int i, n;
    cin >> n;
    a[1] = 1;
    a[2] = 1;
    if (n == 1)
    {
        cout << "1" << endl;
    }
    else if (n == 2)
    {
        cout << "2" << endl;
    }
    else
    {
        for (i = 3; i <= n; i++)
        {
            a[i] = a[i - 1] + a[i - 2];
            s += a[i];
        }
        cout << s+2 << endl;
    }
    return 0;
}