D-9divsior

题目链接:https://atcoder.jp/contests/abc383/tasks/abc383_d

题意:

找出不大于n的具有9个因子的数

思路:

有因数分解定理:x需要满足:x=p1*p1*p2*p2
或者 x=pow(p1,8)

筛出根号n以内的素数,组合得出答案
要注意整数过大溢出

void solve(){
	ll n;cin>>n;
	euler(sqrt(n));
	ll cnt=0;

	for(int i=0;i<prim.size();i++){
		lll x=prim[i]*prim[i];
		for(int j=i+1;j<prim.size();j++){
			lll y=prim[j]*prim[j];
			if(y>n/x)break;
			cnt++;
		}
	}
	for(int i=0;i<prim.size();i++){
		lll x=prim[i]*prim[i];
		if(x>sqrt(n)/x)break;else cnt++;
	}
	cout<<cnt<<endl;
}
posted @ 2025-03-16 09:39  Marinaco  阅读(18)  评论(0)    收藏  举报
//雪花飘落效果