problem 3 最大素因子

#include <iostream>
#include <cstdio>
using  namespace std;
const int MAXN = 100000000;
bool prime[MAXN + 10] = {1,1,0};
int allprime[MAXN/10 + 10];
int main()
{
	int i,j;
	int sub = 0;
	for(i = 2; i <= MAXN; i++)
	{
		if(prime[i] == 0)
		{
			allprime[sub++] = i;
			for(j = i + i; j <= MAXN; j += i)
			{
				prime[j] = 1;
			}
		}
	}
	long long  num = 600851475143;
		i = sub;
	while(i--)
	{
		if(!(num % allprime[i]))
		{
			break;

		}
	}
	printf("%d\n",allprime[i]);

	
		
	return 0;
}


以下是一个MATLAB中的蚁群算法,它有11个输入参数,可以得到1个最优结果: function [bestSol, bestCost] = antColonyOptimization(nAnts, maxIter, alpha, beta, rho, Q, tau0, problem) % nAnts: 蚂蚁数量 % maxIter: 最大迭代次数 % alpha: 信息重要程度因子 % beta: 启发式信息重要程度因子 % rho: 信息挥发因子 % Q: 信息增加强度因子 % tau0: 初始信息浓度 % problem: 问题结构体,包含距离矩阵和城市数量 % 初始化信息浓度 tau = tau0 * ones(problem.nCities, problem.nCities); % 初始化最优解和最优代价 bestSol = zeros(1, problem.nCities); bestCost = Inf; % 开始迭代 for iter = 1:maxIter % 初始化蚂蚁位置 antPos = randi(problem.nCities, nAnts, 1); % 计算每只蚂蚁的路径 antPath = zeros(nAnts, problem.nCities); antCost = zeros(nAnts, 1); for k = 1:nAnts for i = 2:problem.nCities % 计算下一个城市的概率 p = tau(antPos(k), :) .^ alpha .* (1 ./ problem.dist(antPos(k), :)) .^ beta; p(antPath(k, 1:i-1)) = 0; p = p / sum(p); % 选择下一个城市 antPos(k, i) = randsample(problem.nCities, 1, true, p); end % 计算路径长度 antPath(k, :) = antPos(k, :); antCost(k) = sum(problem.dist(sub2ind([problem.nCities, problem.nCities], antPath(k, 1:end-1), antPath(k, 2:end)))); % 更新最优解和最优代价 if antCost(k) < bestCost bestSol = antPath(k, :); bestCost = antCost(k); end end % 更新信息浓度 deltaTau = zeros(problem.nCities, problem.nCities); for k = 1:nAnts for i = 1:problem.nCities-1 deltaTau(antPath(k, i), antPath(k, i+1)) = deltaTau(antPath(k, i), antPath(k, i+1)) + Q / antCost(k); end deltaTau(antPath(k, end), antPath(k, 1)) = deltaTau(antPath(k, end), antPath(k, 1)) + Q / antCost(k); end tau = (1 - rho) * tau + deltaTau; end end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值