主题:[讨论]从一个帖子中的因子分解想到的问题
这个算法来自:
[url]http://bbs.pfan.cn/post-287959.html[/url]
[quote][code=c]
#include <stdio.h>
#include <math.h>
int main(void)
{
int n, nsq;
scanf("%d", &n); // 输入要分解的n
while( n % 2 == 0) // 先试除2
{
n /= 2; // n中去掉2这个因子
printf("2,"); // 输出因子2
}
nsq = (int)sqrt((double)n); // 记录平方根的结果
for(int n1=3; n1<=nsq; ) // n1用于试除
{
if(n % n1 == 0) //判断n除以n1的余数是不是为0
{
printf("%d,", n1); // 输出这个因子
n /= n1; // n中去掉n1这个因子
nsq = (int)sqrt((double)n); // 重新记录平方根的结果
}
else // 除不尽的话,加一试下一个数
{
n1+=2;
}
}
if ( n != 1 ) printf( "%d,",n );
printf( "\b \b" );
return 0;
}
[/code] [/quote]
这个算法很优秀.
[url]http://bbs.pfan.cn/post-287959.html[/url]
[quote][code=c]
#include <stdio.h>
#include <math.h>
int main(void)
{
int n, nsq;
scanf("%d", &n); // 输入要分解的n
while( n % 2 == 0) // 先试除2
{
n /= 2; // n中去掉2这个因子
printf("2,"); // 输出因子2
}
nsq = (int)sqrt((double)n); // 记录平方根的结果
for(int n1=3; n1<=nsq; ) // n1用于试除
{
if(n % n1 == 0) //判断n除以n1的余数是不是为0
{
printf("%d,", n1); // 输出这个因子
n /= n1; // n中去掉n1这个因子
nsq = (int)sqrt((double)n); // 重新记录平方根的结果
}
else // 除不尽的话,加一试下一个数
{
n1+=2;
}
}
if ( n != 1 ) printf( "%d,",n );
printf( "\b \b" );
return 0;
}
[/code] [/quote]
这个算法很优秀.