POJ 1142 分解质因数练习

题意 史密斯数定义:一个数按十进制位拆分求和 == 这个数分解质因数后,所有质因数十进制位拆分求和的和,但该数不能使质数。然后给你一个数n,问你比它大的最小史密斯数是几。

思路 纯暴力即可,但要注意排除质数,并且是大于n不是大于等于n。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#include <cstring>
#include <string>
#include <cstdlib>
#include <map>
using namespace std;
#define I64_MAX 9223372036854775807 
typedef long long ll;
const double pi=acos (-1.0);
const double eps=1e-8 ;
//const ll INF=(I64_MAX)/2;
//#pragma comment(linker, "/STACK:102400000,102400000")
const int inf=0x3f3f3f3f ;
#define maxx(a) memset(a, 0x3f, sizeof(a))
#define zero(a) memset(a, 0, sizeof(a))
#define FILL(a,b) memset(a, b, sizeof(a))
#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)
#define srep(i,n) for(i = 1;i <= n;i ++)
#define snuke(c,itr) for( __typeof((c).begin()) itr=(c).begin();itr!=(c).end();itr++)
#define MP make_pair
#define fi first
#define se second
typedef pair <int, int> PII;
typedef pair <ll, ll> PX;
typedef pair<int,ll> PIL;
#define MAX

ll n;
vector<ll> vec;

int getSum(ll x)
{
	int res = 0;
	while(x > 0)
	{
		res += (int)(x % (ll)10);
		x /= 10;
	}
	return res;
}

int fenJie(ll x,vector<ll>& v)
{
	ll i = 2;
	v.clear();
	while(i*i <= x)
	{
		while(x%i == 0)
		{
			x /= i;
			v.push_back(i);
		}
		i++;
	}
	if(x > 1) //x is a zhiShu
	{
		v.push_back(x);
	}
	return v.size();
}

int main ()
{
    // freopen("E:\\input.txt" ,"r", stdin);
     // freopen ("E:\\out.txt","w",stdout);
	ll i;
	int j;
	while(scanf("%lld",&n) != EOF)
	{
		if(n==0)
			break;
		for(i=n+1;1;i++)
		{
			int sum1 = 0,sum2 = 0;
			sum1 = getSum(i);
			fenJie(i,vec);
			if(vec.size() == 1)
				continue;
			for(j=0;j<vec.size();j++)
			{
				sum2 += getSum(vec[j]);
			}
			if(sum1 == sum2)
			{
				printf("%lld\n",i);
				break;
			}
		}
		
		
	}

	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值