/* 分解1亿亿以内大合数的质因子 */
#include <stdio.h>
#include <stdlib.h>
#define PMAX 10000000000000000
#define NUM 5761456
/* PMAX NUM
1亿 1230
10亿 3402
100亿 9593
1千亿 27294
1万亿 78499
3万亿 130347
10万亿 227648
100万亿 664580
1亿亿 5761456
*/
long prime[NUM]={2,3};
void set_Prime_table( void )
{
long n=5,p2=9,k,kr=1,kp=2;
while(1)
{
if(n==p2)
{
kr++;
p2=prime[kr]*prime[kr];
continue;
}
for(k=1; k<kr; k++)
{
if(n % prime[k]==0)goto nadd2;
}
prime[kp]=n;
if(++kp==NUM)break;
nadd2:
n=n+2;
}
if((__int64)n*n<PMAX)abort( );
return;
}
#define OUTPUT(FORMAT,DATA) printf(FORMAT,DATA),fprintf(fp,FORMAT,DATA)
int main( void )
{
__int64 Big,xx,yy2;
FILE *fp=fopen("fenjie.txt","w");
set_Prime_table( );
//for(Big=90874329411493;Big<=90874329412297;Big++)
for(Big=9999734477729833;Big<=9999734477730649;Big++)
{
int k=0,First=1;long yy=2;xx=Big;yy2=yy*yy;
OUTPUT("%I64d=",xx);
while(k<NUM && xx>=yy2)
{
while(xx>=yy2 && 0==xx%yy)
if( First )
{
First=0;xx=xx/yy;
OUTPUT("%ld",yy);
}
else
{
xx=xx/yy;
OUTPUT("×%ld",yy);
}
yy=prime[++k];yy2=(__int64)yy*yy;
}
if(!First)OUTPUT("×",0);
OUTPUT("%I64d\n",xx);
}
fclose(fp);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define PMAX 10000000000000000
#define NUM 5761456
/* PMAX NUM
1亿 1230
10亿 3402
100亿 9593
1千亿 27294
1万亿 78499
3万亿 130347
10万亿 227648
100万亿 664580
1亿亿 5761456
*/
long prime[NUM]={2,3};
void set_Prime_table( void )
{
long n=5,p2=9,k,kr=1,kp=2;
while(1)
{
if(n==p2)
{
kr++;
p2=prime[kr]*prime[kr];
continue;
}
for(k=1; k<kr; k++)
{
if(n % prime[k]==0)goto nadd2;
}
prime[kp]=n;
if(++kp==NUM)break;
nadd2:
n=n+2;
}
if((__int64)n*n<PMAX)abort( );
return;
}
#define OUTPUT(FORMAT,DATA) printf(FORMAT,DATA),fprintf(fp,FORMAT,DATA)
int main( void )
{
__int64 Big,xx,yy2;
FILE *fp=fopen("fenjie.txt","w");
set_Prime_table( );
//for(Big=90874329411493;Big<=90874329412297;Big++)
for(Big=9999734477729833;Big<=9999734477730649;Big++)
{
int k=0,First=1;long yy=2;xx=Big;yy2=yy*yy;
OUTPUT("%I64d=",xx);
while(k<NUM && xx>=yy2)
{
while(xx>=yy2 && 0==xx%yy)
if( First )
{
First=0;xx=xx/yy;
OUTPUT("%ld",yy);
}
else
{
xx=xx/yy;
OUTPUT("×%ld",yy);
}
yy=prime[++k];yy2=(__int64)yy*yy;
}
if(!First)OUTPUT("×",0);
OUTPUT("%I64d\n",xx);
}
fclose(fp);
return 0;
}