鱼C论坛

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

第一阶段考核第2

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

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

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

x
#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;
}        

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

这是题目

这是题目
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> 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,说明分解质因数过程结束,打印输出即可。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 18:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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