记录编号 |
364500 |
评测结果 |
AWWAAAAAAA |
题目名称 |
区间质数和 |
最终得分 |
80 |
用户昵称 |
FoolMike |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
1.660 s |
提交时间 |
2017-01-16 20:11:52 |
内存使用 |
0.29 MiB |
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<ctime>
using namespace std;
typedef long long ll;
const ll mod=23333333333333333ll;
const int p[25]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,93};
int rand_int(){return rand()<<15|rand();}
ll mul(ll a,ll b,ll p){
return (a*b-(ll)(a/(long double)p*b+1e-3)*p+p)%p;
}
ll mi(ll x,ll y,ll p){
ll ans=1;
for (;y;y>>=1,x=mul(x,x,p))
if (y&1) ans=mul(ans,x,p);
return ans;
}
bool check(ll x){
if (x==1) return 0;
for (int i=0;i<25;i++){
if (x==p[i]) return 1;
if (!(x%p[i])) return 0;
}
for (int i=25;i;i--){
int p=rand_int()%(x-1)+1;
if (mi(p,x-1,x)!=1) return 0;
}
return 1;
}
int main()
{
freopen("bigprime.in","r",stdin);
freopen("bigprime.out","w",stdout);
ll l,r,ans=0;
scanf("%lld%lld",&l,&r);
srand(unsigned(time(NULL)));
for (;l<=r;l++)
if (check(l)) ans=(ans+l)%mod;
printf("%lld\n",ans);
return 0;
}