问题标题: 酷町堂:3835

0
1
已解决
梁逸凡
梁逸凡
资深守护
资深守护
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int n,m,a[5010];
bool f(int k) {
    if(k==1) return false;
    for(int i=2; i<=sqrt(k); i++) {
        if(k%i==0) {
            return false;
        }
    } 
    return true;
}
int main(){
    cin>>n;
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0){
            if(f(i))
                m++;
        }
        if(n%(n-i)==0){
            if(f(n-i))
                m++;
        }
    }
    cout<<m;
    return 0;
} 

30分代码,纠纠错

梁逸凡在2020-03-08 12:25:55追加了内容

人呢?


0
已采纳
邹昊轩
邹昊轩
资深光能
资深光能

建议用埃氏筛法:

for(int i=2;i<=n;i++)
{
    if(n%i==0) cnt++;
    while(n%i==0) n/=i;
}

这是我的核心代码,请自己定义,望采纳。

邹昊轩在2020-03-14 14:37:38追加了内容

不要举报,谢谢!

0
龙舟
龙舟
高级光能
高级光能

你少了一个去重

末位应该加上一段去重代码

代码自己想

望采纳

0
周明轩
周明轩
资深光能
资深光能

你这样容易超时或者Wrong answer

0
张帆
张帆
中级天翼
中级天翼

用这个

你用埃氏筛法做,先把质数筛出来,

在循环遍历2~n,如果是质数且是n的因数

cnt++;

最后输出cnt

你这样容易超时或者Wrong answer

我要回答