试题A:求余数
问题描述
求12345678901234567890123456789012345678901234567890除以2023的余数。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
小提示:比赛时可以用python处理高精度问题
本题python代码:
a=12345678901234567890123456789012345678901234567890print(a%2023)
1e10是double类型,模运算时需要强转int
思路:
- 利用模运算的性质和幂的分配律,把大数表示成 1234567890×1010+12345678901234567890×1010+1234567890 的形式。
- 通过循环利用模运算性质计算余数,避免大数直接运算。
#include<iostream>
using namespace std;
#define int long long
signed main()
{
//12345678901234567890123456789012345678901234567890
//2345678901234567890等价于 1234567890*10^10+1234567890 的思想
int a=1234567890;
int n=5;
int ans=0;
int mod=2023;
int N=1e10;
for(int i=1;i<=n;i++)
{
ans=(ans*N%mod+a%mod)%mod;
}
cout<<ans;
return 0;
}
试题B:数位和
问题描述
只能被1和本身整除的数称为质数。
请问在1(含)到1000000(含)中,有多少个质数的各个数位上的数字之和为23。提示:599就是这样一个质数,各个数位上的数字之和为5+9+9= 23。
笞案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
思路:
- 枚举1到1000000内的所有数,对每个数判断是否为质数(只能被1和自身整除)。
- 同时计算每个质数的数位和,判断是否为23,符合条件则计数。
#include<iostream>
#include<cmath>
using namespace std;
bool isprime(int n)
{
if(n<2)return false;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
return false;
}
return true;
}
bool check(int x)
{
int sum=0;
while(x)
{
sum+=x%10;
x/=10;
}
r

最低0.47元/天 解锁文章
9057

被折叠的 条评论
为什么被折叠?



