嘉加嘉www 发表于 2022-4-10 12:23:36

第一阶段考核第2

#include <stdio.h>

int main()
{
        long long i,j,num=600851475143,max;
        int flag=1;
       
        for(i=2;i<=num/2;i++)
        {
                flag=1;
                if(i%2==0)
                {
                        flag=0;
                        continue;
                }
                for(j=num/i;;j++)
                {
                        flag=1;
                        if(j%2==0)
                        {
                                flag=0;
                                break;
                        }
                        if(flag&&num==i*j)
                        {
                                max=i;
                                if(j>max)
                                {
                                        max=j;
                                }
                                break;
                        }
                        break;
                }
        }
                printf("最大质因数为:%lld",max);
                return 0;
}       

代码哪里错了啊?我的思路是先判断因数是否为质数,如是质数,则比较两数大小,最后输出最大数。

风车呼呼呼 发表于 2022-4-10 12:44:54

如果我理解正确的话,你的实现思路是:
先依次求得所有质数i,然后用num/i得到另一个因子,接着判断i和另一因子j的大小,保留大的那个因子;
有几个问题,
1.求质数i的时候,只对2取余不对,比如9,通过你的程序判断是不是也会被判定为质数呢?
2.根据题目给的例子可以知道,质数因子是指相乘后能够得到那个合数。质数因子可能会有多个(两个及两个以上),而你的逻辑是默认质数因子只有两个,这肯定是有问题的。

jhq999 发表于 2022-4-10 13:04:15

本帖最后由 jhq999 于 2022-4-10 15:10 编辑

一个数的除了1之外最小的因数一定是质数
int main()
{
        unsigned long long val=45,yinzi=2;
        printf("输入一个数字:");
        scanf_s("%llu",&val);
        for (int i = yinzi; i < val/yinzi ;i++)
        {
                while(val%yinzi)//最小的因子一定是质数因子
                {
                        yinzi++;
                }
                printf("%llu,",yinzi);
                val/=yinzi;
                while(!(val%yinzi))
                {
                  val/=yinzi;
                        printf("%llu,",yinzi);
                }
               
                       
        }
       
                if(val>1)printf("%llu",val);
       
        printf("最大因子:%llu",val>yinzi?val:yinzi);
        return 0;
}
int main()
{
      long long num=78,sum=1,i=2;//,a=i;
      for (; i < num; i++)//分解因数
      {
                if(0==num%i)
                {
                        num=num/i;
                        //if(a!=i)printf("%lld,",i),a=i;
                        printf("%lld×",i);
                        sum*=i;
                        //a=i;
                        i--;//一个数的因子的最小因子不小于这个数的最小因子
                              
                }

      }
      //if(a!=num)printf("%lld",num),a=i;
      printf("%lld=%lld",num,sum*num);
      return 0;
}
71×839×1471×6857=600851475143

yzzc 发表于 2022-4-10 15:41:58

本帖最后由 yzzc 于 2022-4-10 15:43 编辑

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void)
{
        int n, k;//n,用户输入的正整数;k,最小质数(素数)
        printf("请输入一个正整数\n");
        scanf("%d", &n);
        printf("%d=", n);
        for (k = 2; k <= n; k++)
                while (n != k)
                {
                        if (n % k == 0)
                        {
                                printf("%d*", k);
                                n /= k;
                        }
                        elsebreak;
                }
        printf("%d\n", n);
        return 0;
}
分析:对n进行分解质因数,找一个最小质数(素数)k。

      1.如果n>k,n也能被k整除,打印出k的值,n的值改为n/k

      2.如果n不能被k整除,k++

      3.如果n=k,说明分解质因数过程结束,打印输出即可。
页: [1]
查看完整版本: 第一阶段考核第2