求助,分解质因数的数组里面跑出一些奇奇怪怪的东西
查看原帖
求助,分解质因数的数组里面跑出一些奇奇怪怪的东西
691463
somebody_kang楼主2024/6/20 22:48

rt,先抛开思路是否正解不谈,我调试用于筛质因数的数组里面莫名会有一些特别大的数窜出来,感觉是cpp 的什么东西出问题了,求大佬分析

#include<bits/stdc++.h>
using namespace std;
bool vis[1145],flag;
int a0,a1,b0,b1,book[1145];//book[i]:b1/a1的质因数i的幂次
void breakdown1(int s){//to b1/a1
	for(int i=2;i<=1e5&&s>1;++i){
		while(s%i==0&&s>1){
			book[i]++;s/=i;
		}
	}
}
void breakdown2(int s){//to a0/a1||b1/b0
	for(int i=2;i<=1e5&&s>1;++i){
		if(s%i==0){
			if(vis[i]){
				flag=1;return;//no solution
			}
			vis[i]=1;
			while(s%i==0&&s>1)s/=i;
		}
	}
}
int main(){
	int T;
	cin>>T;
	while(T--){
		memset(book,0,sizeof(book));
		memset(vis,0,sizeof(vis));
		cin>>a0>>a1>>b0>>b1;
		breakdown1(b1/a1);
		breakdown2(a0/a1);
		breakdown2(b1/b0);
		if(flag){
			cout<<0<<endl;
			continue;
		}
		int ans=1;
		for(int i=1;i<=1e5;++i){
			if(book[i]&&!vis[i]){
				cout<<i<<" "<<book[i]<<endl;//调试语句
				ans*=book[i];
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}

输入样例1后就会出现上述问题

2024/6/20 22:48
加载中...