#include<stdio.h>
#define s_size 10000000
int lpfact[10000001]={0};
void
seive(){
long long i, j;
for(i=2; i<=s_size; i+=2)
lpfact[i]=2;
for(i=3; i<s_size; i+=2){
if(!lpfact[i]){
lpfact[i]=i;
for(j=i; (j*i)<s_size; j+=2){
if(!lpfact[j*i])
lpfact[j*i]=i;
}
}
}
}
void
factorize(int n){
int i, factor, power;
if(lpfact[n]==n || n==1){
return;
}
while(n>1){
i=n; power=0;
factor=lpfact[i];
while(n%lpfact[i]==0){
power++;
n/=lpfact[i];
}
printf("%d^%d ",factor
,power
); }
}
int main(){
int i;
seive();
for(i=1; i<=50; i++)
factorize(i);
factorize(10000000);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KCiNkZWZpbmUgc19zaXplIDEwMDAwMDAwCmludCBscGZhY3RbMTAwMDAwMDFdPXswfTsKCnZvaWQKc2VpdmUoKXsKCWxvbmcgbG9uZyBpLCBqOwoJZm9yKGk9MjsgaTw9c19zaXplOyBpKz0yKQoJCWxwZmFjdFtpXT0yOwoJZm9yKGk9MzsgaTxzX3NpemU7IGkrPTIpewoJCWlmKCFscGZhY3RbaV0pewoJCQlscGZhY3RbaV09aTsKCQkJZm9yKGo9aTsgKGoqaSk8c19zaXplOyBqKz0yKXsKCQkJCWlmKCFscGZhY3RbaippXSkKCQkJCQlscGZhY3RbaippXT1pOwoJCQl9CgkJfQoJfQp9Cgp2b2lkCmZhY3Rvcml6ZShpbnQgbil7CglpbnQgaSwgZmFjdG9yLCBwb3dlcjsKCWlmKGxwZmFjdFtuXT09biB8fCBuPT0xKXsKCQlwcmludGYoIiVkXjFcbiIsbik7CgkJcmV0dXJuOwoJfQoJd2hpbGUobj4xKXsKCQlpPW47IHBvd2VyPTA7CgkJZmFjdG9yPWxwZmFjdFtpXTsKCQl3aGlsZShuJWxwZmFjdFtpXT09MCl7CgkJCXBvd2VyKys7CgkJCW4vPWxwZmFjdFtpXTsKCQl9CgkJcHJpbnRmKCIlZF4lZCAiLGZhY3Rvcixwb3dlcik7Cgl9CQkJCglwcmludGYoIlxuIik7Cn0KCmludCBtYWluKCl7CglpbnQgaTsKCXNlaXZlKCk7Cglmb3IoaT0xOyBpPD01MDsgaSsrKQoJCWZhY3Rvcml6ZShpKTsKCWZhY3Rvcml6ZSgxMDAwMDAwMCk7CglyZXR1cm4gMDsKfQ==