解题思路:

例子分析: 66%2==0  那么就输出2*   

                  66/2=33   33%2!=0  33%3==0  输出3空格

                  33/3=11  显然11%11==0   此时 11/11=1 输出11

                  由此可知n=2时 不满足66相除2后的数33,就自增n++   n=3 以此类推



注意事项:n不满足两个条件才自增1:不是素数,x不能被n整除


参考代码:

#include<iostream>
using namespace std;
int ss(int x){//素数判断方法
    int i;
    if(x==1 || x==2 )
      return x;
    for(i=2;i<x;i++){
        if(x%i==0)
            return 0;
    }
    return x;
}
int main()
{
    int  x,n,k,b=0;
    while(scanf("%d",&x)!=EOF)
    {
        n=2;
        while(x!=1)
        {
            if( x%n==0 &&ss(n))//满足n是素数就相除 并且还要能与x整除
            {
                x=x/n;//相除
                printf("%d ",n);
				b++;
 
            }//不满足自增1
            else
                n++;
        }
        printf("\n%d",b);
    }
    return 0;
 
}


 

0.0分

2 人评分

  评论区

作者大大,你弄的while(scanf) 导致了,只能对第一次输入的数进行质因数个数进行正确统计,假如再次输入数字进行质因数判断,会累加。再有,我有一个疑问,一个数的因数是否包含它本身,质因数是否包含它本身?你的程序包含,但是我好像记得因数不包括自己
2020-02-19 18:03:58
  • «
  • 1
  • »