鱼C论坛

 找回密码
 立即注册
查看: 1993|回复: 4

第一阶段考核第2

[复制链接]
发表于 2022-4-10 12:23:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         long long i,j,num=600851475143,max;
  5.         int flag=1;
  6.        
  7.         for(i=2;i<=num/2;i++)
  8.         {
  9.                 flag=1;
  10.                 if(i%2==0)
  11.                 {
  12.                         flag=0;
  13.                         continue;
  14.                 }
  15.                 for(j=num/i;;j++)
  16.                 {
  17.                         flag=1;
  18.                         if(j%2==0)
  19.                         {
  20.                                 flag=0;
  21.                                 break;
  22.                         }
  23.                         if(flag&&num==i*j)
  24.                         {
  25.                                 max=i;
  26.                                 if(j>max)
  27.                                 {
  28.                                         max=j;
  29.                                 }
  30.                                 break;
  31.                         }
  32.                         break;
  33.                 }
  34.         }
  35.                 printf("最大质因数为:%lld",max);
  36.                 return 0;
  37. }       
复制代码


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

这是题目

这是题目
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-10 12:44:54 | 显示全部楼层
如果我理解正确的话,你的实现思路是:
先依次求得所有质数i,然后用num/i得到另一个因子,接着判断i和另一因子j的大小,保留大的那个因子;
有几个问题,
1.求质数i的时候,只对2取余不对,比如9,通过你的程序判断是不是也会被判定为质数呢?
2.根据题目给的例子可以知道,质数因子是指相乘后能够得到那个合数。质数因子可能会有多个(两个及两个以上),而你的逻辑是默认质数因子只有两个,这肯定是有问题的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-10 13:04:15 | 显示全部楼层
本帖最后由 jhq999 于 2022-4-10 15:10 编辑

一个数的除了1之外最小的因数一定是质数
  1. int main()
  2. {
  3.         unsigned long long val=45,yinzi=2;
  4.         printf("输入一个数字:");
  5.         scanf_s("%llu",&val);
  6.         for (int i = yinzi; i < val/yinzi ;i++)
  7.         {
  8.                 while(val%yinzi)//最小的因子一定是质数因子
  9.                 {
  10.                         yinzi++;
  11.                 }
  12.                 printf("%llu,",yinzi);
  13.                 val/=yinzi;
  14.                 while(!(val%yinzi))
  15.                 {
  16.                     val/=yinzi;
  17.                         printf("%llu,",yinzi);
  18.                 }
  19.                
  20.                        
  21.         }
  22.        
  23.                 if(val>1)printf("%llu",val);
  24.        
  25.         printf("最大因子:%llu",val>yinzi?val:yinzi);
  26.         return 0;
  27. }
复制代码
  1. int main()
  2. {
  3.         long long num=78,sum=1,i=2;//,a=i;
  4.         for (; i < num; i++)//分解因数
  5.         {
  6.                 if(0==num%i)
  7.                 {
  8.                         num=num/i;
  9.                         //if(a!=i)printf("%lld,",i),a=i;
  10.                         printf("%lld×",i);
  11.                         sum*=i;
  12.                         //a=i;
  13.                         i--;//一个数的因子的最小因子不小于这个数的最小因子
  14.                                 
  15.                 }

  16.         }
  17.         //if(a!=num)printf("%lld",num),a=i;
  18.         printf("%lld=%lld",num,sum*num);
  19.         return 0;
  20. }
复制代码
  1. 71×839×1471×6857=600851475143
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
                        }
                        else  break;
                }
        printf("%d\n", n);
        return 0;
}
分析:对n进行分解质因数,找一个最小质数(素数)k。

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

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

        3.如果n=k,说明分解质因数过程结束,打印输出即可。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-14 22:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表