鱼C论坛

 找回密码
 立即注册
查看: 2004|回复: 7

[已解决]求助,质因数问题!!

[复制链接]
发表于 2022-10-11 10:18:38 | 显示全部楼层 |阅读模式

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

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

x
给出一个正整数n,请问它的最大质因数是多少?

我的代码如下:
#include<stdio.h>
int main()
{
    int n,i,x,y,f[100],j=0;
    _Bool flag=1;
    for(i=n/2;i;i--)
    {
        if(!(n%i))
        {
            for(x=2;x<i;x++)
            {
                if(i%x==0)
                {
                    flag=0;
                }
            }
        }
        if(flag)
        {
            printf("%d",i);
        }
    }
    return 0;
   
}

不知道哪错了。。求大佬指正!!
最佳答案
2022-10-11 10:33:57
本帖最后由 jackz007 于 2022-10-11 13:45 编辑
#include<stdio.h>
int main()
{
    int n,i,x,y,f[100] , j=0 ;
    int flag                 ;       // 用 int 就可以,免得麻烦
    scanf("%d" , & n)        ;
    for(i = n / 2 ; i ; i --) {
        if(! (n % i)) {
            flag = 1         ;       // 对于每一个 i 都需要事先假设其为素数
            for(x = 2 ; x < i ; x ++) {
                if(i % x == 0) {
                    flag = 0 ; 
                    break    ;       // 确定 i 不是素数后,没有必要继续循环
                }
            }
            if(flag) {
                printf("%d\n" , i) ;
                break              ; // 最大素数已经找到,也无需继续循环了
            }
        }
    }
}
        这是我写的
#include<stdio.h>

int main(void)
{
        int i , k , n                ;
        scanf("%d" , & n)            ;
        for(i = 2 , k = n ; i * i < k + 1 ;) {
                if(! (k % i)) k /= i ;
                else i ++            ;
        }
        printf("%d\n" , k)           ;
}
        递归函数版
#include<stdio.h>

int foo(const int n)
{
        int i , r                         ;
        for(i = n / 2 ; i > 1 ; i --) {
                if(! (n % i)) {
                        r = foo(i)        ;
                        break             ;
                }
        }
        return (i == 1) ? n : r           ;
}

int main(void)
{
        int n                             ;
        scanf("%d" , & n)                 ;
        printf("%d\n" , foo(n))           ;
}
        编译、运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
1234567
9721

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-11 10:27:36 | 显示全部楼层
没导boolean的头文件吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-11 10:28:39 | 显示全部楼层
homeskating 发表于 2022-10-11 10:27
没导boolean的头文件吗?

头文件是<stdbool.h>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-11 10:33:57 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-10-11 13:45 编辑
#include<stdio.h>
int main()
{
    int n,i,x,y,f[100] , j=0 ;
    int flag                 ;       // 用 int 就可以,免得麻烦
    scanf("%d" , & n)        ;
    for(i = n / 2 ; i ; i --) {
        if(! (n % i)) {
            flag = 1         ;       // 对于每一个 i 都需要事先假设其为素数
            for(x = 2 ; x < i ; x ++) {
                if(i % x == 0) {
                    flag = 0 ; 
                    break    ;       // 确定 i 不是素数后,没有必要继续循环
                }
            }
            if(flag) {
                printf("%d\n" , i) ;
                break              ; // 最大素数已经找到,也无需继续循环了
            }
        }
    }
}
        这是我写的
#include<stdio.h>

int main(void)
{
        int i , k , n                ;
        scanf("%d" , & n)            ;
        for(i = 2 , k = n ; i * i < k + 1 ;) {
                if(! (k % i)) k /= i ;
                else i ++            ;
        }
        printf("%d\n" , k)           ;
}
        递归函数版
#include<stdio.h>

int foo(const int n)
{
        int i , r                         ;
        for(i = n / 2 ; i > 1 ; i --) {
                if(! (n % i)) {
                        r = foo(i)        ;
                        break             ;
                }
        }
        return (i == 1) ? n : r           ;
}

int main(void)
{
        int n                             ;
        scanf("%d" , & n)                 ;
        printf("%d\n" , foo(n))           ;
}
        编译、运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
1234567
9721

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-11 15:00:30 | 显示全部楼层
jackz007 发表于 2022-10-11 10:33
这是我写的

        递归函数版

感谢大佬!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-11 23:27:05 | 显示全部楼层
jackz007 发表于 2022-10-11 10:33
这是我写的

        递归函数版

我想问一下
if(! (k % i)) k /= i ;
这一行代码是干啥的,,我看了半天没看懂。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-11 23:32:54 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-11 23:35 编辑
灯火阑珊201 发表于 2022-10-11 23:27
我想问一下
if(! (k % i)) k /= i ;
这一行代码是干啥的,,我看了半天没看懂。。。


        k 一开始等于 n,i 从 2 开始,由小到大循环枚举 k 的因子,找到后,及时从 k 中进行剔除,k /= i 就是在进行剔除操作。等到循环结束的时候,k 自然就是一个素数了,而且,还是最大的那一个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-11 23:42:57 | 显示全部楼层
jackz007 发表于 2022-10-11 23:32
k 一开始等于 n,i 从 2 开始,由小到大循环枚举 k 的因子,找到后,及时从 k 中进行剔除,k / ...

感谢感谢!!!懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 12:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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