求助
查看原帖
求助
808416
weiboxuan_20120707楼主2024/12/27 12:22

Subtask #0,Subtask #1 全对,但是Subtask #2就过4个点

#include<bits/stdc++.h>
using namespace std;
long long n;
int cnt,len;
//素数筛变量 
const int N=1000000;
long long prime[1000010];
bool vis[1000010];
//分解质因数变量 
long long yin[1000010],num[1000010];
int main()
{
	scanf("%lld",&n);
//分解质因数
	vis[0]=vis[1]=1;
	for(int i=2;i<=N;i++)
	{
		if(vis[i]==0)	prime[++cnt]=i;
		for(int j=1;j<=cnt;j++)
		{
			if(i*prime[j]>N)	break;
			vis[i*prime[j]]=1;
			if(i%prime[j]==0)	break;	
		}
	}
	for(int i=1;i<=cnt;i++)
	{
		if(n%prime[i]!=0)	continue;
		len++;
		yin[len]=prime[i];
		while(n%prime[i]==0)
			num[len]++,n/=yin[len];
		if(n==1)	break;
	}
//分解质因数结束
	long long ans=0;
	for(int i=1;i<=len;i++)
	{
		long long l=1,r=1e9,ans1;
		while(l<=r)
		{
			long long mid=(l+r)/2;
			if(mid*(mid+1)/2<=num[i])
			{
				ans1=mid;
				l=mid+1;
			}
			else
			{
				r=mid-1;
			}
		}
		ans+=ans1;
	}
	printf("%lld",ans);
	return 0;
}
2024/12/27 12:22
加载中...