2 条题解
-
-2
#include <bits/stdc++.h> using namespace std; inline int read()//读入优化 { int x = 0, f = 1; char ch = getchar(); while (!isdigit(ch)) { f = ch != '-'; ch = getchar(); } while (isdigit(ch)) { x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar(); } return f ? x : -x; } inline void write(int x)//输出优化 { if (x >= 10) write(x / 10); putchar(x % 10 + 48); } const int N = 1e7 + 100; int T, x, ls; int f[N], nx[N]; bool check(int x)//判断是否含有数字7 { while (x) { if (x % 10 == 7) return 1; x /= 10; } return 0; } void init()//预处理部分 { for (int i = 1; i <= N - 10; i++) { if (f[i])//如果被标记过,就跳过 continue; if (check(i))//如果含有数字7,标记其倍数 { for (int j = i; j <= N - 10; j += i) f[j] = 1; continue; } nx[ls] = i;//记录i ls = i;//更新ls } } int main() { init();//先预处理 T = read(); while (T--) { x = read(); if (f[x])//被标记了输出-1,否则输出nx puts("-1"); else write(nx[x]), putchar('\n'); } return 0; }
-
-2
Goodbye OI!
#include<stdio.h> bool yes[10001010]; int res[10001010],tot; int x[200010],t,maxx; bool check(int x){ while(x){ int t=(x%10); if(t==7) return 1; x/=10; } return 0; } int nxt(int x){ for(int i=x+1;;i++){ if(!yes[i]) return i; } } int rd(){ int x=0,f=1; char c=getchar(); while(c<'0'||c>'9'){ if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9'){ x=(x<<1)+(x<<3)+(c^48); c=getchar(); } return x*f; } int maxn(int a,int b){ return a>b?a:b; } int main(){ freopen("number.in","r",stdin); freopen("number.out","w",stdout); t=rd(); for(int i=1;i<=t;i++){ x[i]=rd(); maxx=maxn(x[i],maxx); } for(int i=7;i<=maxx+1000;i++){ if(!yes[i]){ if(check(i)){ yes[i]=1; res[++tot]=i; for(int j=i+i;j<=maxx+1000;j+=i) yes[j]=1; } } } for(int i=1;i<=t;i++){ if(yes[x[i]]) printf("-1\n"); else printf("%d\n",nxt(x[i])); } // fclose(stdin); // fclose(stdout); return 0; }
- 1
信息
- ID
- 223
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 8
- 标签
- 递交数
- 175
- 已通过
- 32
- 上传者