桐桐数(超时)不知怎么办(C++)

今天,我正在写一道题目可我蒙了 look
此题用C++
题目描述
桐桐很喜欢研究数字,特别喜欢研究质数。一天,桐桐发现有一些数字可以表示成两个质数相乘的形式,比如,
10=2×5
10=2×5,
2、5 都是质数,所以,10 是一个“桐桐数”。

所以桐桐决定考考你,她告诉你一个数
n ,请你判断
n 是不是“桐桐数”。
输入
一个数

n (1≤n≤2^31−1−1)

输出
输出一行,如果
n 是一个“桐桐数”,则输出 It's a Tongtong number.,否则输出It's not a Tongtong number.。

样例
输入
10
输出
It's a Tongtong number.
我的代码:


#include<bits/stdc++.h>
using namespace std;

bool  ss(int a)
{
    int s=0;
    for(int i=1;i<=a;i++)
    {
        if(a%i==0)
        {
            s++;
        }
    }
    if(s==2)    return 1;
    return 0;
}
int main()
{
    //    freopen(".in","r",stdin);
    //    freopen(".out","w",stdout);
    long long n;
    cin>>n;
    for(int i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)
        {
            if(ss(i)&&ss(n/i))
            {
                cout<<"It's a Tongtong number.";return 0;
            }
        }
    }
    cout<<"It's not a Tongtong number.";
return 0;
}




改进下判断素数的函数ss()应该就可以了。

修改如下:

参考链接:

 
 
#include<bits/stdc++.h>
using namespace std;
 
 // http://c.biancheng.net/view/498.html
 // 改进下求素数的方法 
bool  ss(int a)
{
    int s=0;
    for(int i=2;i<=sqrt(a);i++)
    {
        if(a%i==0)
        {
               return 0;
        }
    }

    return 1;
}
int main()
{
    //    freopen(".in","r",stdin);
    //    freopen(".out","w",stdout);
    long long n;
    cin>>n;
    for(int i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)
        {
            if(ss(i)&&ss(n/i))
            {
                cout<<"It's a Tongtong number.";return 0;
            }
        }
    }
    cout<<"It's not a Tongtong number.";
return 0;
}
 
 


img

请问怎么改~~~~~~~~我(菜鸟)