QOJ.ac
QOJ
ID | Submission ID | Problem | Hacker | Owner | Result | Submit time | Judge time |
---|---|---|---|---|---|---|---|
#1583 | #932982 | #10204. Heretical … Möbius | N_z_ | ship2077 | Success! | 2025-03-13 10:34:41 | 2025-03-13 10:34:41 |
Details
Extra Test:
Wrong Answer
time: 1ms
memory: 3712kb
input:
00010111010101100110 01110011011100100011 01110001010000100111 01110100011100100111 01010111011001100111 01110111001101110101 01110010011101100111 01010011000100000011 01100101011101100111 00110111010101110100
output:
-1
result:
wrong answer 1st words differ - expected: '802840400', found: '-1'
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#932982 | #10204. Heretical … Möbius | ship2077 | WA | 281ms | 3840kb | C++23 | 1.4kb | 2025-03-13 10:16:56 | 2025-03-13 10:35:00 |
answer
#include<bits/stdc++.h>
using namespace std;
constexpr int lim=1e9,N=32000,m[]={4,9,25,49,121,169},inv[]={1,7,16,30,67,9},k[]={1,4,36,900,44100,5336100,901800900};
int ans,num,cnt,x[6],pri[N];
vector<int>vec[6];
string s,str;bool vis[N+5];
void init(int n){
for (int i=2;i<=n;i++)
if (!vis[i]){ pri[++num]=i*i;
for (int j=i<<1;j<=n;j+=i)
vis[j]=1;
}
}
bool mu(int x){
for (int i=1;i<=num&&pri[i]<=x;i++)
if (!(x%pri[i])) return 0;
return 1;
}
void upd(int x){
if (x>ans) return ;
for (int i=1;i<=200;i++)
if (mu(x+i)!=s[i]-'0')
return ;
ans=x;
}
void exgcd(int a,int b,int &x,int &y){
if (!b) return x=1,y=0,void();
exgcd(b,a%b,y,x);y-=a/b*x;
}
void CRT(){ int b=0;
for (int i=0;i<6;i++)
b+=1ll*(x[i]-b%m[i]+m[i])%m[i]*inv[i]%m[i]*k[i];
while (b+200<=lim) upd(b),b+=k[6];
}
void dfs(int now){
if (now==6) return CRT(),void();
for (auto tmp:vec[now]) x[now]=tmp,dfs(now+1);
}
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
s=" ";
for (int i=0;i<10;i++)
cin>>str,s+=str;
init(N);
for (int i=1;i<=200;i++) cnt+='1'-s[i];
if (cnt<65||cnt>90) return cout<<-1<<endl,0;
for (int k=0;k<6;k++)
for (int i=1;i<=m[k];i++){
int fl=1;
for (int j=i;j<=200;j+=m[k])
if (s[j]=='1') {fl=0;break;}
if (fl) vec[k].push_back(m[k]-i);
}
ans=INT_MAX;dfs(0);
cout<<(ans==INT_MAX?-1:ans+1)<<endl;
return 0;
}