当前位置: 代码迷 >> C语言 >> 合数分解成质数之和
  详细解决方案

合数分解成质数之和

热度:331   发布时间:2008-04-11 22:40:20.0
N是一个合数,求出其最多由多少个最小不同质数和组成,并要求按小到大输出这些质数。
2008= 2+ 3+ 5+ 7+ 11+ 13+ 17+ 19+ 23+ 29+ 31+ 37
      + 41+ 43+ 47+ 53+ 59+ 61+ 67+ 71+ 73+79+83
      + 89+ 97+ 101+ 103+ 107+ 109+ 113+ 127+ 131
      + 137+2+19
其中有33个最小的不同质数
请问我上面的分析对不?你的题目的意思是不是这个意思?
----------------解决方案--------------------------------------------------------
回复 9# 的帖子
多谢上面几位的帮助,只是大家好像都没注意到这些质数之和要等于给定的数
我运行了几位的程序,结果都不正确。我有一组参考数据,是对n=1998来说的,它可以分解成以下数据。
3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107  109 113 131 137 139  

我的那个程序对这个数据是正确的。
----------------解决方案--------------------------------------------------------
回复 11# 的帖子
你给的数据好像有重复的,题目要求这些质数不能相同。
对n=1998来说的,它可以分解成以下数据。
3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107  109 113 131 137 139  。
感兴趣的话可以先用这个数据试试。
----------------解决方案--------------------------------------------------------
越想越恶心,除了搜索偶想不出什么好办法。。。。


----------------解决方案--------------------------------------------------------
我们的程序都有缺陷..就是应该dp比如10这个数可以分为3和7.但是用我们的程序是没办法实现的...因为中间有个5..有谁可以帮我的改一下...我要回去了...呵呵
----------------解决方案--------------------------------------------------------
针对2008我写了个程序 你看下  
#include<stdio.h>
#define N 33
int spt(int m)
{
     int i=2;
      while(m%i!=0)
          i++;
          if(m==i)
              return 1;
        else
           return 0;
}      
     
void main()
{  int n,m,c=0,i,j; static a[N];
    printf("请输入2008");
    scanf("%d",&n);
   
     j=0;
     for(i=2;i<=131;i++)
     {     
          if (spt(i)>0)
          {        
                  a[j]=i;
                    n=n-i;
               j++;
          }
      }   
         for(j=0;j<N;j++)
         {
           if (spt(n+a[j])>0)
           {
              a[j]=n+a[j];
                 break;
           }      
              
         }
      for(j=0;j<N;j++)
      {
          printf("%d\t",a[j]);
      
      }
} 写的是苯法子 只是针对2008写的  么辙了 谁有好的思路 可以说下参考下
----------------解决方案--------------------------------------------------------
有点难度吧,这是我们学校研究生复试题,没隔几年就出一次,曾考过1998,2006,过两天就复试了,万一又出个2008就傻了。
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]qitian[/un] 在 2008-4-11 23:20 的发言:[/bo]

你给的数据好像有重复的,题目要求这些质数不能相同。
对n=1998来说的,它可以分解成以下数据。
3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107  109 113 131 137 139  。
感兴趣的 ...


这些都是连续的 素数 当然好写 用我貌似是4#最前面给的程序 写就好了 但是总有特殊的 有没人有好的思路 分享下
----------------解决方案--------------------------------------------------------
楼主,请说一下输入的数最大的可能取值
有思路的话偶试一下


----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]qitian[/un] 在 2008-4-11 23:50 的发言:[/bo]

有点难度吧,这是我们学校研究生复试题,没隔几年就出一次,曾考过1998,2006,过两天就复试了,万一又出个2008就傻了。


倒  那就凑把  我上面的那个可以酸是凑出来的  需要我注释下么   应该有好的酸法求出来 HOHO  我再好好想下
----------------解决方案--------------------------------------------------------
  相关解决方案