UVALive 6396 Factors 反素数!!

本文探讨了一种未被解决的数学难题,即如何计算反素数的和。作者尝试了一个算法,但在实现过程中发现了错误,并记录了其思考过程和遇到的问题。文章详细介绍了算法的设计思路、实现细节以及遇到的挑战。

刚开始看到,想到是反素数,还有点小鸡冻。。。然而结局是悲伤的T^T,没想到第一篇博客居然是未AC的。。。先留个坑

好吧,发现错误了!!!


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
#define rep(i,n) for(int i=0; i MAXV * 1.0) return -1;
		res = res * (n + i) / i; // 总觉得中间过程还是有可能溢出。。。。
		/*  这里2B了,可能两个都不能整除,但相乘后可以
		if((n + i) % i == 0)
		{
			int tmp = (n + i) / i;
			res = res * tmp;
		}
		else
		{
			res = res / i;
			res = res * (n + i);
		}*/
	}
	return res;
}
void dfs(ull res,int k,int sum,int lim,ll n)
{
	if(res >= ans) return;
	if(1 == n)
	{
		ans = res;
		return;
	}
	ll mul = 1,tmp = 1,ss;
	for(int i=1; i<=lim; i++)
	{
		if(mul * 1.0 * pri[k] > MAXV * 1.0) break;
		mul *= pri[k];
		if(res * 1.0 * mul > MAXV * 1.0) break;
		if((tmp = Judge(sum,i)) == -1) break;
		if(n % tmp != 0) continue;
		dfs(res * mul,k+1,sum+i,i,n / tmp);
	}
}
int main()
{
	//freopen("out.txt","w",stdout);

	Prime();
	MAXV = 1;
	MAXV = (MAXV << 63) - 1;
	while(cin>>n)
	{
		ans = MAXV;
		if(n == 1) ans = 2;
		else dfs(1,0,0,64,n);
		cout<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值