问题标题: 酷町堂:3824

0
0
已解决
周建勋
周建勋
中级光能
中级光能

3824   求自然数的因数2

题目描述 Description

任给一个自然数n(1<=n<=1000),求该自然数除1和本身外所有的因数,如果没有则输出0。

输入描述 Input Description

一个正整数n

输出描述 Output Description

一行,输出n除1和本身外所有的因数,用空格隔开;没有则输出0

样例输入 Sample Input

样例一:30
样例二:23

样例输出 Sample Output

样例一:2 3 5 6 10 15
样例二:0

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int n,i;
    cin>>n;
    if(n==1)
    {
        cout<<0;
        return 0;
    } 
    for(i=2;i<n;i++)
    {
        if(n%i==0)
        {
            cout<<i<<" ";
        }
    }
    return 0;
}

哪里错了,请各位大佬找错。

70分

周建勋在2019-07-05 21:28:29追加了内容

题目错了


0
已采纳
赵逸凡
赵逸凡
初级启示者
初级启示者

你不是学到了素数了吗...

万一这个数不是1,也不是合数,怎么办?你忽略了素数(质数)的存在!

蒟蒻:这道题数据范围是1000,嗯,打表,在网上抄个质数表,然后判断是不是这个表里面的,轻松解决!(暴力枚举)

萌新:此题只要在你的程序上加个判断质数的函数就AC了,代码

bool f=0;
for(int i=2;i<n;i++)if(!n%i)f=1;
if(!f)n是质数

(函数标记)

大佬:普通筛法了解一下(质数筛法)

神犇:可以优化的,可以i从2开始,到sqrt(n)结束,或者....(优化算法)

0
屈子元
屈子元
初级守护
初级守护

你忽略了质数的可能,如果输入2(及所有质数)的话什么输出都没有,而按照题意应该输出0的,可定义一个Isprime函数,如果判断为真则输出一个0

bool Isprime(int n)

这是类型和参数 函数可以用for循环搞定

难道你没看到第二个标准据点过不了吗

我要回答