[NICA #2] 优秀正整数
题目描述
Aya 定义符合如下条件的正整数 xxx 为优秀正整数:
- xxx 为一个完全平方数;
- xxx 的各位数位和为质数;
例如说,252525 是一个优秀正整数,因为 25=5×525=5\times 525=5×5,为完全平方数,且 2+5=72+5=72+5=7,为质数。
现在给定 L,RL,RL,R,请求出 LLL 到 RRR(包含 LLL 和 RRR)的正整数中,所有优秀正整数的乘积,对 998244353998244353998244353 取模的值。若不存在优秀正整数,则输出 000。
输入格式
一行,输入两个正整数 L,RL,RL,R。
输出格式
输出 LLL 到 RRR(包含 LLL 和 RRR)的正整数中,所有优秀正整数的乘积,对 998244353998244353998244353 取模的值。若不存在优秀正整数,则输出 000。
样例 #1
样例输入 #1
1 30
样例输出 #1
400
提示
数据保证,对于所有数据,1≤L≤R≤10121 \leq L \leq R \leq 10^{12}1≤L≤R≤1012。
C++实现
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=998244353;
int l,r;
bool vis[110];
signed main(){
scanf(“%lld%lld”,&l,&r);
vis[1]=vis[0]=1;
for(int i=2;i<=110;i++){
for(int j=2;ji<=110;j++)vis[ij]=1;
}
int x=sqrt(l),y=sqrt®,ans=1,flag=0;
for(int i=x;i<=y;i++)
{
if(ii<l)continue;
int sum=0;
int num=ii;
while(num){
sum+=(num%10);
num/=10;
}
if(!vis[sum])ans=((ans%mod)(ii%mod))%mod,flag=1;
}
if(!flag)
puts(“0”);
else
printf(“%lld”,ans);
return 0;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
3552

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



