| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 858 人关注过本帖, 1 人收藏
标题:素数 和 算法的问题,
只看楼主 加入收藏
cuijingchun
Rank: 3Rank: 3
来 自:黑龙江
等 级:论坛游侠
威 望:1
帖 子:108
专家分:186
注 册:2011-9-28
结帖率:90%
收藏(1)
已结贴  问题点数:10 回复次数:11 
素数 和 算法的问题,
程序代码:
#include<stdio.h>
bool IsPrime(int m)  /*用于判断m是否是素数*/
{  
    int i;
    for(i=2; i<m; i++) 
    {
        if(0 == m%i)
        {
            return false;
            break;
        }
        if (i == m)
            return true;
    }
}  

int main(void)
{
    int k, i, j;
    scanf("%d",&k);
   
//求这个数的素数的积 例如:12=2*2*3  15=3*5
    if (IsPrime(k))
        printf("这个是素数\n");
    else       
    {
        printf("这个%d有素数之积是:", k);
        for (j=0; j<k; ++j)
        {
           
            for (i=2; i<=k;++i)
            {
                if ( IsPrime(i) )
                {           
                    if ( 0== k%i)
                    {
                        k/=i;
                        printf("%d",i);
                        printf("*");                               
                    }                   
                }                   
            }
                    }       
    }
   
   
    return 0;
} 
昨天,论坛看到 一个素数
如何实现将任意一个整数分解为素数之积
最近学算术基本定理,想用C程序实现它,即输入任意正整数(>1),将该整数分解为素数之积,例如10=2*5,12=2*2*3,18=2*3*3,按类似格式输出结果。。想了很久没能做到完全分解,希望高手能给予指导,一起讨论,
写不太好,别人一会就写出来 ,我用一天 才写出,算法,用的代码太多,要减,怎 么一个减法,   
2011-12-12 00:01
z364172655
Rank: 2
等 级:论坛游民
帖 子:22
专家分:38
注 册:2011-12-8
收藏
得分:10 
https://bbs.bccn.net/thread-357416-1-1.html这个问的是与你一样的问题,可以对照看一下,希望对你有用!
2011-12-12 09:23
z364172655
Rank: 2
等 级:论坛游民
帖 子:22
专家分:38
注 册:2011-12-8
收藏
得分:0 
if ( IsPrime(i) )  //这句判断语句有缺陷,当最后IsPrime(i)=2时将直接跳过if语句。所以你若输入20,则你的输出结果为:这个20有素数之积为:2*5*  ,最后那个2就直接被舍弃了!
2011-12-12 09:29
cuijingchun
Rank: 3Rank: 3
来 自:黑龙江
等 级:论坛游侠
威 望:1
帖 子:108
专家分:186
注 册:2011-9-28
收藏
得分:0 
程序代码:
#include<stdio.h>
bool IsPrime(int m)  /*用于判断m是否是素数*/
{ 
    int i;
    for(i=2; i<m; i++)
    {
        if(0 == m%i)
        {
            return false;
            break;
        }
        if (i == m)
            return true;
    }
}  

int main(void)
{
    int k, i, j;
    scanf("%d",&k);
  
//求这个数的素数的积 例如:12=2*2*3  15=3*5
    if (IsPrime(k))
        printf("这个是素数\n");
    else      
    {
        printf("这个%d有素数之积是:", k);
        for (j=0; j<k; ++j)
        {         
            if (IsPrime(k))
            {
                printf("%d\n", k);
                break;
            }
          
            for (i=2; i<=k;++i)
            {
                if ( IsPrime(i) )
                {          
                    if ( 0== k%i)
                    {
                        k/=i;
                        printf("%d",i);
                        printf("*");                              
                    }                  
                }                  
            }
                    }      
    }
  
  
    return 0;
}
这会对了吧

为自己喜欢游戏做一个自动打怪的程序QQ: 7325231    YY4350晚上编程课欢迎大家来听
2011-12-12 21:48
z364172655
Rank: 2
等 级:论坛游民
帖 子:22
专家分:38
注 册:2011-12-8
收藏
得分:0 
if (IsPrime(k))                   //这段代码作用何在?根本就不会被执行!
            {
                printf("%d\n", k);
                break;
            }
2011-12-13 10:23
constantlike
Rank: 2
等 级:论坛游民
帖 子:8
专家分:31
注 册:2011-12-13
收藏
得分:0 
# include <stdio.h>

int main(void)
{
    int val,i;
    do
    {
    scanf("%d", &val);

    printf("%d = 1", val);
    for (i=2; i<=val; ++i)
        if (val%i == 0)
        {
            printf(" * %d", i);
            val = val/i;
            i = 1;
        }
        printf("\n");
    } while (1);



    return 0;
}


小弟根据题意写的程序,我觉得除数i一定是素数,不需要判断是否是素数,因为如果i是合数的话一定可以分解成素数并被val整除。
2011-12-13 15:10
tianqiao
Rank: 2
等 级:论坛游民
帖 子:80
专家分:55
注 册:2011-9-21
收藏
得分:0 
程序代码:
#include<stdio.h>
int main()
{
    int i=2,sum,d;
    scanf("%d",&sum);
    printf("%d=",sum);
    while(i<sum){
        if(sum%i!=0)
            i=i+1;
        if(sum%i==0){
            sum=sum/i;
            if(sum==1)break;
        printf("%d*",i);
        }
        if(sum==i){
            i-=1;
        }
    }
    if(sum==1)
        d=sum*i;
    printf("%d",d);
    return 0;
}
2011-12-13 15:38
tianqiao
Rank: 2
等 级:论坛游民
帖 子:80
专家分:55
注 册:2011-9-21
收藏
得分:0 
我想根本不需要考虑素数吧!!!
2011-12-13 15:41
cuijingchun
Rank: 3Rank: 3
来 自:黑龙江
等 级:论坛游侠
威 望:1
帖 子:108
专家分:186
注 册:2011-9-28
收藏
得分:0 
以下是引用tianqiao在2011-12-13 15:38:27的发言:

#include
int main()
{
    int i=2,sum,d;
    scanf("%d",&sum);
    printf("%d=",sum);
    while(i<sum){<SUM){
      
        if(sum%i!=0)
            i=i+1;
        if(sum%i==0){
            sum=sum/i;
            if(sum==1)break;
        printf("%d*",i);
        }
        if(sum==i){   // 这个if  没明白
            i-=1; // i -1 不就少于sum 无限循环胃曲
        }
    }
    if(sum==1)
        d=sum*i;
    printf("%d",d);
    return 0;
}
多多指教

为自己喜欢游戏做一个自动打怪的程序QQ: 7325231    YY4350晚上编程课欢迎大家来听
2011-12-13 18:29
cuijingchun
Rank: 3Rank: 3
来 自:黑龙江
等 级:论坛游侠
威 望:1
帖 子:108
专家分:186
注 册:2011-9-28
收藏
得分:0 
回复 6楼 constantlike
你算法太牛了,      val%i  == 0    i =1    for 又从 i=2 开始 算了

平时看什么书 ,   

为自己喜欢游戏做一个自动打怪的程序QQ: 7325231    YY4350晚上编程课欢迎大家来听
2011-12-13 18:42
快速回复:素数 和 算法的问题,
数据加载中...
 
   



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

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