#include <bits/stdc++.h>
#define int long long
using namespace std;
bool is_sqrt(int x){
int p=sqrt(x);
return p*p==x;
}
bool is_prime(int x){
if(x<2) return false;
for(int i=2;i<=sqrt(x);i++){
if(x%i==0){
return false;
}
}
return true;
}
signed main(){
freopen("202504B.in","r",stdin);
freopen("202504B.out","w",stdout);
int l,r;
cin>>l>>r;
while(is_sqrt(l)==false){
l++;
}
int p=sqrt(l)*2-1;
int all=1,flag=0;
for(int i=l;i<=r;i+=p){
int s=i;
int sum=0;
while(s){
int t=s%10;
sum+=t;
s/=10;
}
if(is_prime(sum)==true){
all*=i;
all%=998244353;
flag=1;
}
p+=2;
}
if(flag==1){
cout<<all%998244353;
}else{
cout<<0;
}
}
题面:
题目描述
小信非常热爱数学,有一天他在研究数字时发现有一种数不仅自身是完全平方数,而且它的各位数位和还是质数。例如49,本身是完全平方数:7*7=49,数位和4+9=13还是质数。小信称这种数为“平方质和数”。
现在他想借助计算机寻找 L 到 R(包含 L 和 R)之间的所有平方质和数,计算它们的乘积,然后结果对 998244353 取模,请你帮帮他。
输入格式
一行,输入两个正整数 L,R。
输出格式
输出 L 到 R(包含 L 和 R)的正整数中,平方质和数的乘积,结果对 998244353 取模。若不存在平方质和数,则输出 0。
样例
Input 1
1 30
Output 1
400
数据范围
对于 30\% 的测试点:1≤L≤R≤1000
对于 100\% 的测试点,1≤L≤R≤10^{12}