概述
链接:https://ac.nowcoder.com/acm/contest/923/B
来源:牛客网
输入
复制
3 2 1 5 3 6 4 6 4 2 3 0 2 3 2 2 1 3 3 4 5 6 7 3 4 5 6
输出
复制
equal equal unequal
说明
对于第一组案例: 5!*3!=1*2*3*4*5*1*2*3=720 6!=1*2*3*4*5*6=720 完全相等。 对于第二组案例: 4!*2!*3!*0!=1*2*3*4*1*2*1*2*3*1=288 2!*3!*2!*2!*1!*3!=1*2*1*2*3*1*2*1*2*1*1*2*3=288 完全相等。 对于第三组案例: 5!*6!*7!=435456000 3!*4!*5!*6!=12441600 两者不等。
题解:求出所有质数的个数进行比较
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
using namespace std;
const int N=1e5+5;
int a[N],b[N];
int c[N];
void fun(){
c[0]=c[1]=1;
for(int i=2;i<N;i++){
if(!c[i]){
for(int j=i+i;j<N;j+=i)
c[j]=1;
}
}
}
int main(){
int t,n,m,x;
fun();
scanf("%d",&t);
while(t--){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&x);
a[x]++;
}
for(int i=1;i<=m;i++){
scanf("%d",&x);
b[x]++;
}
for(int i=N-2;i>=2;i--) a[i]+=a[i+1];
for(int i=N-2;i>=2;i--) b[i]+=b[i+1];
for(int i=4;i<N;i++){
if(a[i]&&c[i]){
int y=i;
for(int j=2;j*j<=y;j++){
if(y%j==0){
int num=0;
while(y%j==0){
num++;
y/=j;
}
a[j]+=num*a[i];
}
}
if(y!=1) a[y]+=a[i];
a[i]=0;
}
}
for(int i=4;i<N;i++){
if(b[i]&&c[i]){
int y=i;
for(int j=2;j*j<=y;j++){
if(y%j==0){
int num=0;
while(y%j==0){
num++;
y/=j;
}
b[j]+=num*b[i];
}
}
if(y!=1) b[y]+=b[i];
b[i]=0;
}
}
int leap=0;
for(int i=2;i<N;i++){
if(a[i]!=b[i]){
leap=1;
break;
}
}
if(!leap) printf("equaln");
else printf("unequaln");
}
return 0;
}
最后
以上就是忧伤大山为你收集整理的(思维)小w的a=b问题的全部内容,希望文章能够帮你解决(思维)小w的a=b问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复