奇怪,怎么全屏绿海红花紫嫣黑压的,46分。
代码如下:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,a[250010],ans;
int gcd(int a,int b){
while(b){
int t=a;
a=b;
b=t%b;
}
return a;
}
vector<int> q;
bool b[1000010];
signed main(){
scanf("%lld%lld",&n,&k);
for(int i=1;i<=k;i++) scanf("%lld",&a[i]);
a[k]=gcd(a[k],n);
for(int i=1;i<k;i++) a[i]=gcd(a[i],a[k]);
for(int i=1;i*i<=a[k];i++){
if(a[k]%i==0){
q.push_back(i);
if(i*i!=a[k]) q.push_back(a[k]/i);
}
}
sort(q.begin(),q.end());
for(int i=1;i<k;i++) b[lower_bound(q.begin(),q.end(),a[i])-q.begin()]=1;
for(int i=1;i<q.size();i++){
if(b[i]){
for(int j=0;j<i;j++){
if(q[i]%q[j]) b[j]=1;
}
}
}
for(ans=1;b[ans];ans++);
printf("%lld",n/q[ans]);
return 0;
}
帮帮我呗!