专栏文章

题解:P8790 [蓝桥杯 2022 国 C] 填空问题

P8790题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@miov2ttl
此快照首次捕获于
2025/12/03 01:38
3 个月前
此快照最后确认于
2025/12/03 01:38
3 个月前
查看原文

试题 A

直接暴力会慢到爆炸(202202011200202202011200 项),考虑找规律,打出前 200200 项的末位,发现以 6060 项为循环,循环节为
MARKDOUN
1 1 2 3 5 8 3 1 4 5 9 4 3 7 0 7 7 4 1 5 6 1 7 8 5 3 8 1 9 0 9 9 8 7 5 2 7 9 6 5 1 6 7 3 0 3 3 6 9 5 4 9 3 2 5 7 2 9 1 0
202202011200÷60=3370033520202202011200 \div 60 = 3370033520,一个循环内有 8877,故答案为 3370033520×8=269602681603370033520 \times 8 = 26960268160
斐波那契代码:
CPP
#include<bits/stdc++.h>
using namespace std;
#define int unsigned long long
int re[250] = {0};
int f(int n){
    if(re[n]!=0)return re[n];
    if(n<=2)return re[n]=1;
    else return re[n]=f(n-1)+f(n-2);
}
signed main(){
    for(int i=1;i<=200;i++){
        cout<<f(i)%10/*只用个位*/<<" ";
    }
    return 0;
}
(这个程序运行到八九十向会爆 ull,但找规律够了。)

试题 B

2×1062\times10^6 的数据量可以直接使用质数筛,读入后筛出指数有 342693342693 个。
代码:
CPP
#include<bits/stdc++.h>
using namespace std;
bool pd(int x){
	for(int i=2;i*i<=x;i++){
		if(!(x%i)) return 0;
	}
	return 1;
}
int main(){
	long w;
	long ans = 0;
	for(int i=0;i<2000000;i++){
		cin>>w;
		ans += pd(w);
	}
	cout<<ans<<endl;
	return 0;
}
(建议改用文件读写。)

将两个答案套入模板。
CPP
#include<bits/stdc++.h>
using namespace std;

char pid;
int main() {
    cin >> pid;
    if(pid == 'A')
        puts("26960268160");
    else
        puts("342693");
    return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...