输入n(1 <= n <= 1e9),有多组测试数据:
616
27
输出:
616 = 2^3 * 7 * 11
27 = 3^3
(注意输出空格,但行末不要有空格)
题目转自 http://yzfy.org
第一次:
#include
<
stdio.h
>
#include < math.h >
int main()
{
long int num;
int n,i;
while (scanf( " %ld " , & num) != EOF){
int count = 0 ,flag = 0 ;
printf( " %ld = " ,num);
n = sqrt(num);
for (i = 2 ;i <= n;count = 0 ,i ++ ){
while (num % i == 0 ){
count ++ ;
num /= i;
}
if (count != 0 ){
n = sqrt(num);
if (flag == 0 ){
flag ++ ;
printf( " %d " ,i);
if (count > 1 )
printf( " ^%d " ,count);
}
else {
printf( " * %d " ,i);
if (count > 1 )
printf( " ^%d " ,count);
}
}
}
if (flag == 0 )
printf( " %d " ,num);
else
if (num != 1 )
printf( " * %d " ,num);
printf( " " );
}
return 0 ;
}
#include < math.h >
int main()
{
long int num;
int n,i;
while (scanf( " %ld " , & num) != EOF){
int count = 0 ,flag = 0 ;
printf( " %ld = " ,num);
n = sqrt(num);
for (i = 2 ;i <= n;count = 0 ,i ++ ){
while (num % i == 0 ){
count ++ ;
num /= i;
}
if (count != 0 ){
n = sqrt(num);
if (flag == 0 ){
flag ++ ;
printf( " %d " ,i);
if (count > 1 )
printf( " ^%d " ,count);
}
else {
printf( " * %d " ,i);
if (count > 1 )
printf( " ^%d " ,count);
}
}
}
if (flag == 0 )
printf( " %d " ,num);
else
if (num != 1 )
printf( " * %d " ,num);
printf( " " );
}
return 0 ;
}
OJ给的结果:
Name: "
bysdy" Problem ID "
12"
Submit Time: 2008/2/02-15:37
G++: Compile Warning:
Line In function `int main()':
Line 11: warning: converting to `int' from `double'
Line 18: warning: converting to `int' from `double'
Line 34: warning: int format, long int arg (arg 2)
Line 37: warning: int format, long int arg (arg 2)
Test 1: Accepted Time = 121 ms
Test 2: Accepted Time = 31 ms
Test 3: Accepted Time = 438 ms
Test 4: Accepted Time = 705 ms
Test 5: Time Limit Exceed
--------------------------------
Problem ID 12
Test Result Time Limit Exceed
Time Limit 10000 ms
Total Memory 32 Kb / 10000 Kb
Code Length 628 Bytes
第二次:
Submit Time: 2008/2/02-15:37
G++: Compile Warning:
Line In function `int main()':
Line 11: warning: converting to `int' from `double'
Line 18: warning: converting to `int' from `double'
Line 34: warning: int format, long int arg (arg 2)
Line 37: warning: int format, long int arg (arg 2)
Test 1: Accepted Time = 121 ms
Test 2: Accepted Time = 31 ms
Test 3: Accepted Time = 438 ms
Test 4: Accepted Time = 705 ms
Test 5: Time Limit Exceed
--------------------------------
Problem ID 12
Test Result Time Limit Exceed
Time Limit 10000 ms
Total Memory 32 Kb / 10000 Kb
Code Length 628 Bytes
第二次:
#include
<
stdio.h
>
#include < math.h >
int main()
{
long int num;
int n,i;
while (scanf( " %ld " , & num) != EOF){
int count = 0 ,flag = 0 ;
printf( " %ld = " ,num);
n = int (sqrt(num));
for (i = 2 ;i <= n;count = 0 ,i += 2 ){
while (num % i == 0 ){
count ++ ;
num /= i;
}
if (count != 0 ){
n = int (sqrt(num));
if (flag == 0 ){
flag ++ ;
printf( " %d " ,i);
if (count > 1 )
printf( " ^%d " ,count);
}
else {
printf( " * %d " ,i);
if (count > 1 )
printf( " ^%d " ,count);
}
}
if (i == 2 )
i = 1 ;
}
if (flag == 0 )
printf( " %ld " ,num);
else
if (num != 1 )
printf( " * %ld " ,num);
printf( " " );
}
return 0 ;
}
#include < math.h >
int main()
{
long int num;
int n,i;
while (scanf( " %ld " , & num) != EOF){
int count = 0 ,flag = 0 ;
printf( " %ld = " ,num);
n = int (sqrt(num));
for (i = 2 ;i <= n;count = 0 ,i += 2 ){
while (num % i == 0 ){
count ++ ;
num /= i;
}
if (count != 0 ){
n = int (sqrt(num));
if (flag == 0 ){
flag ++ ;
printf( " %d " ,i);
if (count > 1 )
printf( " ^%d " ,count);
}
else {
printf( " * %d " ,i);
if (count > 1 )
printf( " ^%d " ,count);
}
}
if (i == 2 )
i = 1 ;
}
if (flag == 0 )
printf( " %ld " ,num);
else
if (num != 1 )
printf( " * %ld " ,num);
printf( " " );
}
return 0 ;
}
OJ的结果:
Name: "
bysdy" Problem ID "
12"
Submit Time: 2008/2/02-15:48
G++: Compile OK
Test 1: Accepted Time = 86 ms
Test 2: Accepted Time = 8 ms
Test 3: Accepted Time = 161 ms
Test 4: Accepted Time = 371 ms
Test 5: Accepted Time = 9564 ms
--------------------------------
Problem ID 12
Test Result Accepted
Total Time 10190 ms
Total Memory 32 Kb / 10000 Kb
Code Length 664 Bytes
第三次:
Submit Time: 2008/2/02-15:48
G++: Compile OK
Test 1: Accepted Time = 86 ms
Test 2: Accepted Time = 8 ms
Test 3: Accepted Time = 161 ms
Test 4: Accepted Time = 371 ms
Test 5: Accepted Time = 9564 ms
--------------------------------
Problem ID 12
Test Result Accepted
Total Time 10190 ms
Total Memory 32 Kb / 10000 Kb
Code Length 664 Bytes
第三次:
#include
<
stdio.h
>
#include < math.h >
int main()
{
long int num;
int n,i,j;
while (scanf( " %ld " , & num) != EOF){
int count = 0 ,flag = 0 ;
printf( " %ld = " ,num);
n = int (sqrt(num));
for (i = 2 ,j = 1 ;i <= n;count = 0 ,i = (i <= 3 ? i + 2 :((i < 6 * j) ? ( 6 * j + 1 ):(j ++ , 6 * j - 1 )))){ // 素数至少满足6*j+1或6*j-1
while (num % i == 0 ){
count ++ ;
num /= i;
}
if (count != 0 ){
n = int (sqrt(num));
if (flag == 0 ){
flag ++ ;
printf( " %d " ,i);
if (count > 1 )
printf( " ^%d " ,count);
}
else {
printf( " * %d " ,i);
if (count > 1 )
printf( " ^%d " ,count);
}
}
if (i == 2 )
i = 1 ;
}
if (flag == 0 )
printf( " %ld " ,num);
else
if (num != 1 )
printf( " * %ld " ,num);
printf( " " );
}
return 0 ;
}
#include < math.h >
int main()
{
long int num;
int n,i,j;
while (scanf( " %ld " , & num) != EOF){
int count = 0 ,flag = 0 ;
printf( " %ld = " ,num);
n = int (sqrt(num));
for (i = 2 ,j = 1 ;i <= n;count = 0 ,i = (i <= 3 ? i + 2 :((i < 6 * j) ? ( 6 * j + 1 ):(j ++ , 6 * j - 1 )))){ // 素数至少满足6*j+1或6*j-1
while (num % i == 0 ){
count ++ ;
num /= i;
}
if (count != 0 ){
n = int (sqrt(num));
if (flag == 0 ){
flag ++ ;
printf( " %d " ,i);
if (count > 1 )
printf( " ^%d " ,count);
}
else {
printf( " * %d " ,i);
if (count > 1 )
printf( " ^%d " ,count);
}
}
if (i == 2 )
i = 1 ;
}
if (flag == 0 )
printf( " %ld " ,num);
else
if (num != 1 )
printf( " * %ld " ,num);
printf( " " );
}
return 0 ;
}
OJ的结果:
Name: "
bysdy" Problem ID "
12"
Submit Time: 2008/2/02-16:12
G++: Compile OK
Test 1: Accepted Time = 87 ms
Test 2: Accepted Time = 6 ms
Test 3: Accepted Time = 115 ms
Test 4: Accepted Time = 266 ms
Test 5: Accepted Time = 6508 ms
--------------------------------
Problem ID 12
Test Result Accepted
Total Time 6982 ms
Total Memory 32 Kb / 10000 Kb
Code Length 708 Bytes
Submit Time: 2008/2/02-16:12
G++: Compile OK
Test 1: Accepted Time = 87 ms
Test 2: Accepted Time = 6 ms
Test 3: Accepted Time = 115 ms
Test 4: Accepted Time = 266 ms
Test 5: Accepted Time = 6508 ms
--------------------------------
Problem ID 12
Test Result Accepted
Total Time 6982 ms
Total Memory 32 Kb / 10000 Kb
Code Length 708 Bytes