这个素数分解程序的复杂度问题

[复制链接]
查看11 | 回复1 | 2009-1-7 00:05:12 | 显示全部楼层 |阅读模式
#include
int isPrime(int a)
{
int temp = a;
for(int i = sqrt(a);i>=2;i--)
{
if(!(temp%i))
return 0;
}
return 1;
}
int main()
{
int a,i=0,flag = 1,t=2;;
printf("请输入你要分解的数: ");
scanf("%d",&a);
printf("%d=",a);
while(a!=1)
{
while(isPrime(t))
{
if(a%t==0)
{
printf("%d",t);
a /= t;
if(a!=1)
printf("*");
}
else
t++;
}
t++;
}
getchar();
return 0;
}
问题,对哪些自然数这个程序的运行速度要快?
问题二,考虑极端的情况,用极端情况的步数表示复杂度
问题三,证明你的复杂度是正确的.

回复

使用道具 举报

千问 | 2009-1-7 00:05:12 | 显示全部楼层
大工作量,无分,居然会有人回答这种问题...假设你输入的数是x哦,对与恰好是2的n次方的数最快,对其他的数还需要t++以若干次得到素数进行判断.此时的时间复杂度是O(logx)(就是以2为底的log x)极端情况就是输入的数恰好是一个素数,此时需要便历所有小于该素数的数,复杂度为o(x)看明白了就会证明了...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行