1.什么是质因子:
质因子结构:
struct factor
{
int x
,cnt
;
}fac
[10];
进行质因子分解:
1.如果p是质因子,如下:
if(n
%prime
[i
]==0)
{
fac
[num
].x
=prime
[i
];
fac
[num
].cnt
=0;
while(n
%prime
[i
]==0)
{
fac
[num
].cnt
++;
n
/=prime
[i
];
}
num
++;
}
2.如果p不是质因子,如下:
if(n
!=1)
{
fac
[num
].x
=n
;
fac
[num
++].cnt
=1;
}
pat A1059
题意:
输入:
1.输入n表示一个int类型的整数
输出:
输出他的质数因子乘积
解题思路:
参考代码:
#include<iostream>
#include<math.h>
using namespace std
;
const int maxn
=100010;
bool is_prime(int n
)
{
if(n
<=1)
return false;
for(int i
=2; i
*i
<=n
; i
++)
if(n
%i
==0)
return false;
return true;
}
int prime
[maxn
],pNum
=0;
void Find_Prime()
{
for(int i
=1; i
<maxn
; i
++)
{
if(is_prime(i
)==true)
{
prime
[pNum
++]=i
;
}
}
}
struct factor
{
int x
,cnt
;
}fac
[10];
int main()
{
Find_Prime();
int n
,num
=0;
cin
>> n
;
if(n
==1)
cout
<< "1=1";
else
{
cout
<< n
<< "=";
int sqr
=(int)sqrt(1.0*n
);
for(int i
=0; prime
[i
]<=sqr
; i
++)
{
if(n
%prime
[i
]==0)
{
fac
[num
].x
=prime
[i
];
fac
[num
].cnt
=0;
while(n
%prime
[i
]==0)
{
fac
[num
].cnt
++;
n
/=prime
[i
];
}
num
++;
}
if(n
==1)
break;
}
if(n
!=1)
{
fac
[num
].x
=n
;
fac
[num
++].cnt
=1;
}
for(int i
=0; i
<num
; i
++)
{
if(i
>0)
cout
<< "*";
cout
<< fac
[i
].x
;
if(fac
[i
].cnt
>1)
printf("^%d",fac
[i
].cnt
);
}
}
return 0;
}
呃呃
转载请注明原文地址:https://ipadbbs.8miu.com/read-18767.html