PC/UVa 110706/10042 Smith Numbers
来源:互联网 发布:京东java在线笔试题 编辑:程序博客网 时间:2024/05/29 02:19
1 最小的素数是2 也就是说0 和1 不是smith数
2 先求素因子,再求各个素因子的各位数字之和,然后相加
3 素数不是smith数
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
#define maxnum 1000
int n;
int num[maxnum],num1[maxnum],l;//记录 素数因子 和素因子的个数
int getNum(int n)//得到一个数n的各位数字之和
{
int sum=0;
int r;
r=0;
do
{
r=n%10;
sum+=r;
n/=10;
} while (n>0);
return sum;
}
int getPrem(int m)//得到一个数m的素数因子,并判断他是不是素数,如果是素数返回-1 如果不是返回这个数的各个素因子的数字之和
{
memset(num,0,sizeof(num));
memset(num1,0,sizeof(num1));
int i,sum;
int t=m;
i=2;
l=0;
if(m%i==0)
{
while(m%i==0)
{
m/=i;
num1[l]++;
}
num[l]=i;
l++;
}
for(i=3;i*i<=m;i+=2)
{
if(m%i==0)
{
while(m%i==0)
{
num1[l]++;
m/=i;
}
num[l]=i;
l++;
}
}
if(m>1)
{
num[l]=m;
num1[l]++;
l++;
}
if(m==t||t==num[0]) return -1;
sum=0;
for(i=0;i<l;i++)
{
if(num[i]>=10)
{
sum+=getNum(num[i])*num1[i];
}
else sum+=num[i]*num1[i];
}
return sum;
}
int main()
{
int t;
int i;
int flag;
int t1,t2;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
flag=-1;
for(i=n+1;;i++)
{
t1=getPrem(i);
if(t1!=-1)
{
t2=getNum(i);
if(t1==t2)
{
flag=i;
break;
}
}
}
printf("%d\n",flag);
}
return 0;
}
- PC/UVa 110706/10042 Smith Numbers
- uva 10042 smith numbers
- UVa 10042 - Smith Numbers
- UVA 10042 Smith Numbers 数论
- UVa Problem 10042 Smith Numbers (Smith 数)
- UVa Problem Solution: 10042 - Smith Numbers
- UVa 10042 && POJ 1142 - Smith Numbers
- UVA 10042 Smith Numbers(数论)
- 110706 Smith Numbers
- Smith Numbers
- Smith Numbers
- Smith Numbers
- programming-challenges Smith Numbers (110706) 题解
- POJ 1142 Smith Numbers
- 1027: Smith Numbers
- zoj 1133 Smith Numbers
- zoj 1133 - Smith Numbers
- POJ 1142 Smith Numbers
- Struts2学习之类型转换
- ffmpeg
- Singleton in Spring to avoid reinvent wheels
- 任务二
- 99se 封装属性设置大全
- PC/UVa 110706/10042 Smith Numbers
- C# 事件解析
- android View
- 软件质量的度量
- 清华大学考博 综合考试
- Android应用开发之实现图片的拖拽显示
- dom属性二
- 蓝桥杯 四方定理 递归
- iphone多点触摸机制及开发需注意的问题