数论 分解质因数
设一个数为n;寻找质因数模板:
for(i=2;i*i<=n;i++)
{
while(n%i==0)//找出因子
{
printf("%d*",i);
n/=i;
}
}
例:120=22235
i=2,120%2=0,是质因数,用while循环找出三个2;n=15;
i=3,15%3=0,是质因数,n=5;
当n=4;4*4=16>5,跳出for循环,输出5;
————————————————————————————————————————
例一代码:
/*
例:120=2*2*2*3*5
i=2,120%2=0,是质因数,用while循环找出三个2;n=15;
i=3,15%3=0,是质因数,n=5;
当n=4;4*4=16>5,跳出for循环,输出5;
*/
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<string.h>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int main()
{
int i,j,n;
scanf("%d",&n);
printf("%d=",n);
for(i=2;i*i<=n;i++)
{
while(n%i==0)//找出因子
{
printf("%d*",i);
n/=i;
}
}
printf("%d\n",n);
return 0;
}
————————————————————————————————————————
例二代码:
/*
该题中定义的数是:
各位数之和==各因子的各位数之和
注意:素数不是该类型的数
*/
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<string.h>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int f(int n)//求一个数的各位数之和
{
int sum=0,i,j;
while(n)
{
sum+=n%10;
n/=10;
}
return sum;
}
int ff(int n)//数论质因子的公式
{
int sum=0,i,j;
for(i=2;i*i<=n;i++)
{
while(n%i==0)//判断是否是因子,参考第一题
{
sum+=f(i);//加上因子的各位数之和
n/=i;
}
}
if(n>1)
sum+=f(n);//加上最后一位因子
return sum;
}
int sushu(int n)
{
int i,j;
int k=(int)(sqrt((double)n)+0.5);
for(i=2;i<=k;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int i,j,z,n;
while(~scanf("%d",&n))
{
if(n==0)
break;
for(i=n+1;;i++)
{
if(sushu(i))//先判断是不是素数
continue;
if(f(i)==ff(i))
break;
}
printf("%d\n",i);
}
return 0;
}