| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1966 人关注过本帖
标题:将其用质因子的乘积表示并输出2到100之间所有结果,格式为:2=2 3=3 4=2* ...
只看楼主 加入收藏
简简单单lqz
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-10-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
将其用质因子的乘积表示并输出2到100之间所有结果,格式为:2=2 3=3 4=2*2......100=2*2*5*5
将其用质因子的乘积表示并输出2到100之间所有结果,格式为:
2=2  
3=3  
4=2*2
......
100=2*2*5*5
搜索更多相关主题的帖子: 表示 输出 结果 格式 
2017-10-26 16:42
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:5 
程序代码:
#include <stdio.h>

int main( void )
{
    for( unsigned i=2; i<=100; ++i )
    {
        unsigned n = i;

        printf( "%u=", n );
        for( unsigned p=2; n!=1; )
        {
            if( n%p == 0 )
            {
                n /= p;
                printf( "%u%c", p, n!=1?'*':'\n' );
            }
            else
                ++p;
        }
    }
}
2017-10-27 08:48
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:3 
回复 2楼 rjsp
感觉这条题是有简便方法的~感觉可以在欧拉筛求素数的基础上保留每个数的第一个因子,求出所有数的第一个因子后再用辗转的思想拆分输出~当然如果我说得有不到位的地方请多多指正~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-10-27 09:29
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:7 
顺便补充欧拉筛求素数的代码以及在此基础上结合题意输出数据~

程序代码:
#include<stdio.h>
#include<string.h>

#define MAX 100

char IsPrime[MAX+1]={0};
int prim[MAX+1]={0};

int first_factor[MAX+1]={0};  //用来保存第一个数的因子,默认质数的值为0。是结合题意的,欧拉筛本来不需要~
int main()
{
    int i=0;
    int j=0;
    int f=0;
    int num=0;
    int num_factor=0;

    memset(first_factor,0,sizeof(first_factor));  //初始化内存块清零

    for (i=2;i<=MAX;++i)
    {
        if (!IsPrime[i])
            prim[num++]=i;

        for (j=0,f=i*prim[j];j<num&&f<=MAX;++j,f=i*prim[j])
        {
            IsPrime[f]=1;

            first_factor[f]=prim[j];

            if (i%prim[j]==0)
                break;

        }

        printf("%d=",i);  //上面是用欧拉筛求素数部分的代码,下面是结合题意整合输出

        num_factor=i;  
        while (first_factor[num_factor])
        {
            printf("%d*",first_factor[num_factor]);
            num_factor/=first_factor[num_factor];
        }

        printf("%d\n",num_factor);
    }

    puts("");

    return 0;
}


[此贴子已经被作者于2017-10-28 13:51编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-10-28 13:39
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:5 
回复 4楼 九转星河
囧~上面数据MAX太小显示不出该算法的效率~有兴趣的可以试试把MAX改大一点和用朴素的试除法比较一下~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-10-28 14:34
快速回复:将其用质因子的乘积表示并输出2到100之间所有结果,格式为:2=2 3=3 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037291 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved