求助神秘UB
  • 板块学术版
  • 楼主xyloph0nex17
  • 当前回复10
  • 已保存回复10
  • 发布时间2023/3/3 16:39
  • 上次更新2023/10/23 23:16:14
查看原帖
求助神秘UB
519204
xyloph0nex17楼主2023/3/3 16:39

以下这份分解质因数的代码在 #define int long long#define int __int128 的情况下结果不同,不知道为什么

数据: 1 198258624

//El Psy Kongroo
#include<bits/stdc++.h>
#define ll long long
#define int __int128
#define pb push_back
#define ri int
#define TIME (1e3 * clock() / CLOCKS_PER_SEC)
using namespace std ;
template <typename T>
inline void read(T&x){
	x = 0 ; char c = getchar() ; bool flg = 1 ; while(c > '9' || c < '0'){if(c == '-')flg = 0 ; c = getchar() ;}
	while(c >= '0' && c <= '9'){x = (x << 1) + (x << 3) + (c ^ 48) ; c = getchar() ;} x = flg ? x : -x ;
}
template <typename T,typename ...Args>
inline void read(T&x,Args&...args){read(x),read(args...);}
bool m_bg ;
const int N = 5e5 + 10 ;
int prm[N],pmn,vis[N] ;
template<typename T>inline void prt(T x){
	if(x>9) prt(x/10);
	putchar(x%10+'0');
}
template<typename T>inline void put(T x){
	if(x<0) putchar('-'),x=-x;
	prt(x);
}
template<typename T>inline void put(char ch,T x){
	put(x),putchar(ch);
}
void prework(){
	for(ri i = 2 ; i <= 1e5 ; i++){
		if(!vis[i])prm[++pmn] = i ;
		for(ri j = 1 ; j <= pmn && i * prm[j] <= 1e5 ; j++){
			vis[i * prm[j]] = 1 ;
			if(i % prm[j] == 0)break ;
		}
	}
}
int buc[N],cnt[N],bcn,x,y,ansx,ansy ;
int T,n,tmpn ;
bool m_ed ;
signed main(){
	prework() ;
	read(T) ; while(T--){
		bcn = 0 ; read(n) ; tmpn = n ; for(ri i = 1 ; i <= pmn ; i++){
			if(tmpn % prm[i] == 0){
				bcn++ ; buc[bcn] = prm[i] ; cnt[bcn] = 0 ;
				while(tmpn % prm[i] == 0)tmpn /= prm[i] , cnt[bcn]+=2 ;
			}
		}if(tmpn>1)buc[++bcn]=tmpn,cnt[bcn]=2 ;
        for(ri i = 1 ; i <= bcn ; i++)cout<<(ll)buc[i]<<" "<<(ll)cnt[i]<<endl ;
		ansx=ansy=0 ;
		if(ansx&&ansy)put(' ',ansx),put('\n',ansy) ; else puts("impossible") ;
	}
	return 0 ;
}
2023/3/3 16:39
加载中...