``` #include<iostream> using namespace std; typedef long long LL; const int N=1500000,M=100010; int vis[N],prime[M]; LL f[M]; int main(){ ios::sync_with_stdio(false); int n,tot=0; cin>>n; if(n==0){ cout<<'0'; return 0; } for(int i=2;i*i<=N;i++){ if(!vis[i]){ for(int j=i*i;j<=N;j+=i){ vis[j]=1; } } } for(int i=2;i<N;i++){ if(!vis[i]){ prime[tot++]=i; } } f[0]=2; for(int i=1;i<n;i++){ //a*b mod n = (a mod n)(b mod n)mod n- f[i]=((f[i-1]%50000)*(prime[i]%50000))%50000; } cout<<f[n-1]<<'\n'; return 0; } ```
如果输入的测试数据是0的话,数组会出现下溢出.
coder 2022-02-10 13:25:47 |
特判可解
coder 2022-02-10 14:28:14 |
#include<iostream> using namespace std; typedef long long LL; const int N=1500000,M=100010; int vis[N],prime[M]; LL f[M]; int main(){ ios::sync_with_stdio(false); int n,tot=0; cin>>n; if(n==0){ cout<<'0'; return 0; } for(int i=2;i*i<=N;i++){ if(!vis[i]){ for(int j=i*i;j<=N;j+=i){ vis[j]=1; } } } for(int i=2;i<N;i++){ if(!vis[i]){ prime[tot++]=i; } } f[0]=2; for(int i=1;i<n;i++){ //a*b mod n = (a mod n)(b mod n)mod n- f[i]=((f[i-1]%50000)*(prime[i]%50000))%50000; } cout<<f[n-1]<<' '; return 0; }
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:1432 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:595 |
剪刀石头布 (C语言代码)不知道怎么直接在scanf中用枚举变量浏览:1304 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:1419 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:505 |
【金明的预算方案】 (C++代码)浏览:838 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:522 |
文科生的悲哀 (C语言代码)浏览:1397 |
1054题解浏览:460 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:608 |