1 条题解
-
0

#include <cstdio> #define int long long const int M = 300005; int read() { int x=0,f=1;char c; while((c=getchar())<'0' || c>'9') {if(c=='-') f=-1;} while(c>='0' && c<='9') {x=(x<<3)+(x<<1)+(c^48);c=getchar();} return x*f; } int n,a,b,L,R,cnt,p[M],mu[M],vis[M]; void init(int n) { mu[1]=1; for(int i=2;i<=n;i++) { if(!vis[i]) p[++cnt]=i,mu[i]=-1; for(int j=1;j<=cnt && i*p[j]<=n;j++) { vis[i*p[j]]=1; if(i%p[j]==0) break; mu[i*p[j]]=-mu[i]; } } } void print(int x) { if(L>R || x>n) return ; if(L==1) printf("%lld ",x),R--; else L--,R--; } void pall(int x,int y) { if(x+y>n) return ; pall(x,x+y);print(x+y);pall(x+y,y); } int cal(int p,int q) { int r=0; for(int i=1;p+q<=n/i;i++) { if(!mu[i]) continue; for(int j=1;p*j+q<=n/i;j++) r+=mu[i]*(n/i-p*j)/q; } return r; } void dfs(int a,int b) { int m=cal(a,b); if(L>R || !m) return ; if(L>m) {L-=m;R-=m;return ;} if(L==1 && m<=R) {pall(a,b);return ;} dfs(a,a+b);print(a+b);dfs(a+b,b); } signed main() { a=read();b=read();n=read();L=read();R=read(); init(n); print(a);dfs(a,b);print(b); }
- 1
信息
- ID
- 9233
- 时间
- 4000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者