正如你所知道的 s_sin 是一个贪玩的不得了的小 P 孩( 如果你非常讨厌他可以直接跳到
第二段),你也知道他最近很喜欢玩一个叫做太阳帝国的原罪的策略游戏我向你保证这是太
阳帝国原罪系列的第八章了。
sin_s 通过游戏学到一个数论知识: 任何一个大于 1 的自然数,都可以唯一分解成有限
个质数的乘积 , 这里 都是质数, 其诸指数 是正整
数。 例如:
sin_s 现在想求出上述定理 P1, P2, ...,Pn 和 a1,a2,...an, 例如 1200 你需要求出 2^4*3*5^2。
★数据输入
第 1 行是正整数 N( 1< N < =2^31) .
★数据输出
输出一行代表数 N 的质数唯一分解( 质数按照升序的)。详细看样例
输入示例 输出示例
1200 2^4*3*5^2
5 5
#include<stdio.h>
bool P(int n,int& i)
{
if(n<2)
return false;
for (;i*i <= n;i++)
{
if(n % i == 0)
return false;
}
return true;
}
int Times(int& x,int d){
int i;
for(i = 0;i*i<= x;i++)
{
if(x % d != 0)
{
return i;
}
x = x/d;
}
}
int main()
{
int times;
int n;
scanf("%d",&n);
int i = 2;
while(1 != n)
{
if(P(n,i))
{
printf("%d",n);
break;
}
times = Times(n,i);
if(times == 1)
{
printf("%d",i);
i++;
break;
}
else if(times == 0)
;
else
{
printf("%d^%d",i,times);
i++;
break;
}
i++;
}
while(1 != n)
{
if(P(n,i))
{
printf("*%d",n);
break;
}
times = Times(n,i);
if(times == 1)
printf("*%d",i);
else if(times == 0)
;
else
printf("*%d^%d",i,times);
i++;
}
return 0;
}