| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 892 人关注过本帖
标题:[原创]NKOJ数分解递归实现
收藏  订阅  推荐  打印 
中学者
Rank: 12Rank: 12Rank: 12
等级:版主
威望:11
帖子:3376
积分:34542
注册:2007-9-14
[原创]NKOJ数分解递归实现

题目描述:
把一个给定的整数分解成若干个素数的和。
Input
一个数。(32位无符号整型数范围内。)

Output
一些素数。

Sample Input
9Sample Output
3 3 3
实现:
#include<stdio.h>
#include<math.h>
int prime(unsigned int n)  //素数判断
{
   unsigned int i;
   int flag=0;  //标志位设为0

   for(i=2;i<=sqrt(double(n))+1;i++)
   {
       if(n==2) { flag=1; break; }
       if(n%i!=0) flag=1;
       else { flag=0; break; }
   }
    if(flag==1) return 1;
    if(flag==0) return 0;
}
void serparte(unsigned int n,int k,int i)  //分解数
{
    if(n%i==0||prime(n))
    {
        k=n-i;
        printf("%d ",i);
        if(prime(k)) printf("%d ",k);
        else
             serparte(k,k,i);
    }
    else
    {
        ++i;
        serparte(n,k,i);
    }
}
int main()
{
    int n,k=0;
    while(scanf("%d",&n)!=EOF)
        serparte(n,k,2);
    return 0;
}
搜索更多相关主题的帖子: NKOJ  递归  分解  
2008-1-7 20:05
中学者
Rank: 12Rank: 12Rank: 12
等级:版主
威望:11
帖子:3376
积分:34542
注册:2007-9-14

在来个非递归的:
#include<stdio.h>
#include<math.h>
int prime(unsigned int n)  //素数判断
{
   unsigned int i;
   int flag=0;  //标志位设为0

   for(i=2;i<=sqrt(double(n))+1;i++)
   {
       if(n==2) { flag=1; break; }
       if(n%i!=0) flag=1;
       else { flag=0; break; }
   }
    if(flag==1) return 1;
    if(flag==0) return 0;
}
void serparte(unsigned int n)  //分解数
{
    int i;
    for(i=2;;)
    {
        if(n%i==0||prime(n))
        {
            n=n-i;
            printf("%d ",i);
            if(prime(n))
            {
                printf("%d ",n);
                break;
            }
            else continue;
        }
        else
        {    ++i;  }
    }
}
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
        serparte(n);
    return 0;
}
时间还是慢~

汇编.....
2008-1-7 20:21
zbqf109
Rank: 3Rank: 3
等级:中级会员
帖子:289
积分:3134
注册:2006-12-31

没有考虑 9 = 7 + 2 或者 5 + 2 + 2 等情况?

坚决不跟用TC的人打交道!
2008-1-7 21:26
nuciewth
Rank: 12Rank: 12Rank: 12
来自:我爱龙龙
等级:版主
威望:93
帖子:9521
积分:95068
注册:2006-5-23

把一个给定的整数分解成若干个素数的和。

如果可以我直接给分成若干个2和1/0个3.

倚天照海花无数,流水高山心自知。
2008-1-7 21:34
zbqf109
Rank: 3Rank: 3
等级:中级会员
帖子:289
积分:3134
注册:2006-12-31
回复 4# 的帖子

其实应该说若干个 2 和 0/1 个 3/5/7/11/…

坚决不跟用TC的人打交道!
2008-1-7 21:39
forever74
Rank: 4
等级:高级会员
威望:2
帖子:505
积分:5844
注册:2007-12-27

是啊,题目有点松了,要说分解成最少个素数还凑合。
2008-1-7 21:39
nuciewth
Rank: 12Rank: 12Rank: 12
来自:我爱龙龙
等级:版主
威望:93
帖子:9521
积分:95068
注册:2006-5-23

原帖由 [bold][underline]zbqf109[/underline][/bold] 于 2008-1-7 21:39 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1174167&ptid=196361][/url]
其实应该说若干个 2 和 0/1 个 3/5/7/11/…
完全不需要3后面的数.

倚天照海花无数,流水高山心自知。
2008-1-7 22:04
中学者
Rank: 12Rank: 12Rank: 12
等级:版主
威望:11
帖子:3376
积分:34542
注册:2007-9-14

呵呵,对了,,,谢谢nuciewth的提醒......从5开始都可以被2,3分解了/////

汇编.....
2008-1-7 22:15
leeco
Rank: 4
等级:高级会员
威望:8
帖子:870
积分:9662
注册:2007-5-10
回复 8# 的帖子

是从2开始
2008-1-7 23:36
中学者
Rank: 12Rank: 12Rank: 12
等级:版主
威望:11
帖子:3376
积分:34542
注册:2007-9-14

1是不是素数好像又争议~

汇编.....
2008-1-7 23:39
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.051191 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved