推下公式 a[i] = a[i-1] + a[i-2] +2
#include<stdio.h> #include<string.h> ]; int main() { long long n; scanf("%lld",&n); a[]=;a[]=;a[]=; ;i<=n;i++) a[i]=(a[i-]+a[i-]+)%; printf("%lld",a[n]); ; }
B 略
找到最大公约数 然后能被最大公约数整除的必然是 a b 的约数
#include<bits/stdc++.h> using namespace std; #define LL long long LL gcd(LL a,LL b){ return b?gcd(b,a%b):a; } int main(){ LL a,b; cin>>a>>b; LL g=gcd(a,b); vector<LL> q; ;i*i<=g;i++){ ){ q.push_back(i); if(i*i!=g) q.push_back(g/i); } } sort(q.begin(),q.end()); ;i<q.size();++i){ cout<<q[i]<<' '; } ; }