蓝桥杯算法训练 素因子去重C++

蓝桥杯算法训练 素因子去重C++

思路:

最开始自己还是只会暴力求解…只能对20% 多亏老师悉心指点

  1. 先看如何将正整数分解成质因数(素因子)
    蓝桥杯算法训练 素因子去重C++
    如下是循环的起止点:
for(k=2;k<=n; )
{
   if(k==n)
}
  1. 将求出的质因子放到一个数组中保存,数组的下标表示该因子,数组的值为0或1,为1表示有该质因子,最后读取该数组的值,将为1的元素下标相乘。

代码:

#include<iostream>
using namespace std;
bool num[4000000]={0};
int main()
{
	long long n,ans=1;
	cin>>n;
	if(n==2){cout<<n;return 0;}
	for(int k=2;k<=n;)
	{
		if(k==n)
		{
			num[k]=1;break; 
		}
		else if(n%k==0)
		{
			num[k]=1;
			n=n/k;			
		}else k++;
	}
	for(int i=2;i<=n;i++)
	{
		if(num[i]==1)ans*=i;
	}
	cout<<ans;
	return 0;
}

心得:

比赛时不能直接看到测试结果的,所以要善于自己设计数据来测试,感觉在这一点上我还没经验。
小学时背过100以内的素数感觉还是挺有用的。if(k==n)时说明分解质因数的过程已经结束,最初没有写这个判断,用716539=83* 89* 97 数据debug时发现了错误
代码能通过但是感觉还需要完善,暂时先这样 咩~

数组定义放在main函数中运行出错的原因:
main()内的数组是局部数组,空间开辟时放在栈区,而栈区空间有限,是不会扩展的,因此大数组不在函数内定义,定义为全局数组则可以