poj1142 Smith Numbers
2015-01-21 16:08
323 查看
题目大意:
一个数他的各个数字的和等于他的各个质因子的各个数字的和,这个数就称为smith Number
求n开始的下一个Smith Number。
思路:
暴力搜。
#include <iostream>
#include <cmath>
#include <stdio.h>
#include <map>
#include <algorithm>
using namespace std;
#define LL long long
#define MAX 100000
#define MD 9901
int sum(int num)
{
if(num/10==0)
return num;
return sum(num/10)+num%10;
}
int primsum(int n)
{
int i=2;
int ret=0;
for(;i*i<=n;++i)
while (n%i==0)
{
ret+=sum(i);
n/=i;
}
if(n!=1)
{
if(ret)
ret+=sum(n);
else return -1;
}
return ret ;
}
bool issmith(int n)
{
int d=sum(n);
int p=primsum(n);
if(p==-1||d!=p)
return false;
return true;
}
int main()
{
int n;
while (scanf("%d",&n),n)
{
n++;
while (!issmith(n))
n++;
printf("%d\n",n);
}
}
一个数他的各个数字的和等于他的各个质因子的各个数字的和,这个数就称为smith Number
求n开始的下一个Smith Number。
思路:
暴力搜。
#include <iostream>
#include <cmath>
#include <stdio.h>
#include <map>
#include <algorithm>
using namespace std;
#define LL long long
#define MAX 100000
#define MD 9901
int sum(int num)
{
if(num/10==0)
return num;
return sum(num/10)+num%10;
}
int primsum(int n)
{
int i=2;
int ret=0;
for(;i*i<=n;++i)
while (n%i==0)
{
ret+=sum(i);
n/=i;
}
if(n!=1)
{
if(ret)
ret+=sum(n);
else return -1;
}
return ret ;
}
bool issmith(int n)
{
int d=sum(n);
int p=primsum(n);
if(p==-1||d!=p)
return false;
return true;
}
int main()
{
int n;
while (scanf("%d",&n),n)
{
n++;
while (!issmith(n))
n++;
printf("%d\n",n);
}
}
相关文章推荐
- POJ-1142 & HDOJ-1333 Smith Numbers 解题报告
- POJ 1142 Smith Numbers
- POJ_1142_Smith Numbers
- poj1142 Smith Numbers
- POJ 1142 Smith Numbers
- poj 1142 Smith Numbers
- POJ-----1142---Smith Numbers
- POJ 1142 Smith Numbers
- POJ 1142 Smith Numbers
- poj 1142 Smith Numbers(数论:欧拉函数变形)
- poj 1142 Smith Numbers
- POJ1142 Smith Numbers(分治法)
- ZOJ 1133 Smith Numbers && POJ 1142 Smith Numbers
- poj 1142 Smith Numbers 筛法
- POJ 1142 Smith Numbers
- POJ 1142 Smith Numbers(我不管,水题我也要写博客)
- UVa 10042 && POJ 1142 - Smith Numbers
- [暴力分治]POJ 1142 Smith Numbers
- POJ 1142 Smith Numbers 笔记
- poj_1142_Smith Numbers(分解质因子)