这段代码时答案给的参考代码: #include<bits/stdc++.h> using namespace std; const int mod=1000000007; int f[10005]; vector<int> p; int a[10005]; priority_queue<int> que; int read() { char c=getchar(); int x=0; while (c<'0' || c>'9') c=getchar(); while (c>='0' && c<='9') { x=x*10+c-'0'; c=getchar(); } return x; } int main() { memset(f,0,sizeof(f)); for (int i=2; i<=10000; i++) { if (f[i]==0) { p.push_back(i); for (int j=i*2; j<=10000; j+=i) f[j]=1; } } int T=read(); while (T--) { int n=read(); for (int i=1; i<=n; i++) a[i]=read(); long long ans=1; for (int i=0; i<p.size(); i++) { for (int j=1; j<=n; j++) { int t=0; while (a[j]%p[i]==0) a[j]/=p[i],++t; if (t>0) que.push(t); } while (que.size()>1) { int a=que.top(); que.pop(); int b=que.top(); que.pop(); --a; --b; if (a>0) que.push(a); if (b>0) que.push(b); } if (que.empty()) que.push(0); int cnt=que.top(); que.pop(); while (cnt--) ans=(ans*p[i])%mod; } sort(a+1,a+n+1); for (int i=1; i<=n-1; i++) { if (a[i]==a[i+1]) { a[i]=a[i+1]=1; } } for (int i=1; i<=n; i++) ans=(ans*a[i])%mod; printf("%lld\n", ans); } return 0; }
点赞 评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 12:04
毕业生招你惹你了,问一个发薪日来一句别看网上乱七八糟的你看哪个工作没有固定发薪日扭头就取消了面试就问了一句公司都是这个态度吗还搞上人身攻击了...
程序员小白条:呃呃呃,都还没面试,我都不会问这么细,何况通不通过,去不去都另说,你没实力和学历的话,在外面就这样,说实话没直接已读不回就不错了,浪费时间基本上
点赞 评论 收藏
分享
自学java狠狠赚一...:骗你点star的,港卵公司,记得把star收回去
点赞 评论 收藏
分享
下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务