我的第一个CSDN - First (小白 求指点)
20251210说明本人目前大一上有很多还不懂第一次发CSDN以后想打ACM请指点 谢谢大佬题目已知递推数列的定义如下:f(0)7;f(1)11;递推公式: f(n)f(n-1)f(n-2);请解决: 给定一个正整数N(0N1e18) 需要判定f(N)是否被3整除如果整除 输出:yes 否则 输出:no先说输入输出标准的ACM输入格式多组数据#includeiostreamusingnamespacestd;intmain(){intN;while(scanf(%d,N)1){intresfib_mod(N);if(res%3)printf(yes\n);elseprintf(no\n);}}暴力解法暴力解法的思路:先算出f(N) 再判断 f(N)%3//暴力递归intfib_mod(intn){if(n0)return7;if(n1)return11;returnfib_mod(n-1)fib_mod(n-2);}//暴力非递归intfib_mod(intn){if(n0)return7;if(n1)return11;intn17;intn211;for(inti2;in;i){//就是辗转相加inttempn1n2;n1n2;n2temp;}returnn2;}暴力解法不能通过 因为N1e18 必超时思路一:发现周期为8#includeiostream#includevectortypedeflonglongll;usingnamespacestd;///* f(0)7; 1 f(1)11; 2 f(2)18; 0 f(3)... 2 2 1 0 1 //到这里是已经一个周期了 T8; 1 2 0 2 */intmain(){ll N;vectorintarr{1,2,0,2,2,1,0,1};while(scanf(%lld,N)1){intresarr[N%8];//周期为8printf(res0?yes\n:no\n);}return0;}##思路二:递推模板优化(但是仍然超时)intfib_mod(longlongn){intmod3;if(n0)return7%mod;if(n1)return11%mod;intn17%mod;intn211%mod;for(longlongi2;in;i){inttemp(n1%modn2%mod)%mod;n1n2%mod;n2temp;}returnn2;}intmain(){longlongN;while(scanf(%dll,N)1){intresfib_mod(N);printf(res0?yes\n:no\n);}}好吧 我只会周期法