搜索
查看: 4218|回复: 8
打印 上一主题 下一主题

987654321的最大质因数那题,但是执行效率很低(改数字为134知编....

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-5 10:20:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include <math.h>
#define N 987654321
int main()
{
        int i,j,k=0,t=0;
        for(i=5;i<=N/2;i++)
    {
                for(j=2;j<=sqrt(i);j++)
                {
                        if(i%j==0)
                        {
                                t=1;
                                break;
                        }
                        else
                                t=0;
                }
        if(t==1)
                        continue;
                if(N%i==0)
                        k=i;
    }
    printf("The minimum prime factor is %d\n",k);
        return 0;
}


最佳答案

查看完整内容

这一题有另一种算法 [mw_shl_code=c,true]#include int main() { int i,j,f,m=-1,n=987654321; i=2; while(i
沙发
发表于 2012-9-5 10:20:34 | 只看该作者
这一题有另一种算法
[mw_shl_code=c,true]#include <stdio.h>
int main()
{
        int i,j,f,m=-1,n=987654321;
        i=2;
        while(i<n)
        {
                f=1;
                for(j=2;j*j<=i;j++)
                {
                        if(i%j==0)
                        {
                                f=0;
                                break;
                        }
                }
                if(f && n%i==0)
                {
                        n/=i;
                        m=i;
                }
                i++;
        }
    printf("The minimum prime factor is %d\n",m);
    return 0;
}[/mw_shl_code]
板凳
 楼主| 发表于 2012-9-5 10:21:16 | 只看该作者
求大神修改之
地板
发表于 2012-9-5 12:58:56 | 只看该作者
还有for(j=2;j<=sqrt(i);j++)这一句
建议改成for(j=2;j*j<=i;j++)
这样比前者的执行效率高多了
因为sqrt函数很耗时间
5#
 楼主| 发表于 2012-9-5 16:07:47 | 只看该作者
virfyf 发表于 2012-9-5 12:58
还有for(j=2;j

thank you!
6#
发表于 2012-9-6 20:54:43 | 只看该作者
纠正virfyf的一个错误:第6行while (i < n)应改为while (i <= n)。另可用system("pause")代替sleep(5000)

点评

赞一个!!!  发表于 2013-4-3 22:46
7#
发表于 2015-4-14 14:16:57 | 只看该作者
virfyf 发表于 2012-9-5 10:20
这一题有另一种算法
[mw_shl_code=c,true]#include
int main()

求注解 .光看代码稍微有点迷糊.!
8#
发表于 2015-10-5 10:34:11 | 只看该作者
virfyf 发表于 2012-9-5 10:20
这一题有另一种算法
[mw_shl_code=c,true]#include
int main()

俺不懂F的作用
9#
发表于 2016-5-26 21:01:10 | 只看该作者
[mw_shl_code=c,true]#include <stdio.h>
int main()
{
    int i=0,j=0,f=0,m=0,n=64;
   
    for(i=2;i<=n;i++)     //i循环到n
    {
        f=1;
        for(j=2;j*j<=i; j++)//判断i是合数还是质数 (一个合数的最小质因数肯定小于等于他的平方根,n/p>=p,n>=p^2
        {
            if(i%j==0)    //如果i是合数
            {
                f=0;                //f=0
                break;    //退出当前循环
            }
        }
        if(f && n%i==0)  //如果f为1,确定i是质数,再由n%i判断i是否n的因数
        {
            n/=i;                //分解质因数的方法是用一个合数的最小质因数(i)去除这个合数(n)
            m=i;               
        }
        
    }
    printf("The minimum prime factor is %d\n",m);
    return 0;
}[/mw_shl_code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表