标题:[原创]NKOJ数分解递归实现
取消只看楼主
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
结帖率:33.33%
 问题点数:0 回复次数:5 
[原创]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-01-07 20:05
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
得分:0 
在来个非递归的:
#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-01-07 20:21
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
得分:0 
呵呵,对了,,,谢谢nuciewth的提醒......从5开始都可以被2,3分解了/////

樱花大战,  有爱.
2008-01-07 22:15
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
得分:0 
1是不是素数好像又争议~

樱花大战,  有爱.
2008-01-07 23:39
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
得分:0 
那么这样最小的素数是2嘛.....只又从5开始可以分解了...........

樱花大战,  有爱.
2008-01-07 23:55
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
得分:0 
nuciewth高见!!!

樱花大战,  有爱.
2008-01-08 14:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-196361-1-1.html




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

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