`
plussai
  • 浏览: 89184 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

分解质因数----zoj_1133

阅读更多

        循环从2开始,到sqrt(a),每次判断a是否能被i整除,如果可以,则将i存如vector中,a/=i,然后--i,目的是继续判断i,因为a可能可以被i整除多次.到循环结束的时候,再将a存入vector中。

#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int getSum(int a)
{
	int res=0;
	int q=a;
	while(q!=0)
	{
		res+=q%10;
		q/=10;
	}
	return res;
		
}
bool isSmith(int a)
{
	int q=a;
	int res1=getSum(a);
	int res2=0;
	vector<int>c;
	for(int i=2;i<=sqrt(a*1.0);i++)
	{
		if(a%i==0)
		{
			a/=i;
			c.push_back(i);
			//printf("%d ",i);	
			i--;
		}
	}
	c.push_back(a);
	if(a==q)
	{
		return false;
	}	
	int size=c.size();
	for(int i=0;i<size;i++)
	{
		res2+=getSum(c[i]);
	}
	//printf("%d\n",a);
	//cout<<res1<<" "<<res2<<endl;
	if(res1==res2)
	return true;
	else
	return false;
}
int main()
{
	int n;
	while(cin>>n&&n)
	{
	for(int i=n+1;i<=2000000000;i++)
	{
		if(isSmith(i))
		{
			cout<<i<<endl;
			break;
		}
	}
	}
	//if(isSmith(4937775))
	//cout<<"success"<<endl;
	return 0;
}

      

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics