现在的位置: 首页 > 综合 > 正文

smith number poj 1142

2013年10月09日 ⁄ 综合 ⁄ 共 634字 ⁄ 字号 评论关闭
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;

bool isprimer(int n)//判断素数
{
	if(n == 1) return false;
	if(n == 2) return true;
	for(int i = 2; i*i <= n; i++)
		if(n % i == 0)
			return false;
	return true;
}

int divide(int n)//计算各个数之和
{
	int sum = 0;
	while( n ){
		sum += n %10;
		n /= 10;
	}
	return sum;
}
int prim_divide(int n)
{
	queue<int> q;
	int i = 2;
	while(true){
		if(isprimer(i) && n%i == 0){
			q.push(i);
			n /= i;
			if(isprimer( n )){
				q.push(n);break;
			}
		}
		else i++; //如果在上一步n不是素数,则i就不能加1,所以要用i++要判断一下才行
	}
	int sum = 0;
	while( !q.empty() ){
		sum += divide(q.front());
		q.pop();
	}
	return sum;
}

int main()
{
	int n;
	while( scanf("%d", &n) && n )
	{
		while(true){
			n++;
			if(isprimer( n )) continue;
			if(divide(n) == prim_divide(n)){
				printf("%d\n",n);break;
			}
		}
	}
}

抱歉!评论已关闭.