回 帖 发 新 帖 刷新版面

主题:求助:猫老大数算法

Problem
猫老大很喜欢研究数字,特别是喜欢质数。一天,猫老大发现有一些数字可以表示成两个质数相乘的形式。比如,10=2×5. 2,5都是质数,所以 10 是一个“猫老大数 ”。所以猫老大决定考考彩虹,他告诉彩虹一个数 n ,判断 n 是不是“猫老大数”?

Input
此题含多组数据,每组数据为一个数 n (1<=n<=2^31-1).

Output
对于每组数据输出一行,如果 n 是一个“猫老大数”则输出 “It's a MaoLaoDa number.” 否则输出“It's not a MaoLaoDa number.”

Sample Input
10

Sample Output
It's a MaoLaoDa number.

[em11][em19][em19][em19][em19][em19]

回复列表 (共9个回复)

沙发

只有2个质因子的数是猫老大数

板凳

请说一下具体算法,如果能写下更好用freepascal

3 楼

直接枚举
就是打印时这个’要用ACSII

4 楼

此数的约数个数为4
1,本身,及2个质数

5 楼

program sample;
var
  number,i,k:longint;
begin
read(number);
for i:=2 to trunc(sqrt(number)) do
  if number mod i=0 then k:=k+1;
if k=1 then writeln('It is a Maolaoda number.')
  else writeln('It is not a Maolaoda number.');
end.

6 楼

sqrt(2^31) 也不到50000

枚举就可以过了.

在2..sqrt(n)里  MOD=0就不是 没有就是

7 楼

问一个小问题,质数的平方算不算

8 楼

#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
void sushu(vector<int>&v,int m){
    for(int i=2;i<m;++i){
        for(int j=2;j<=i;++j){
            if(j!=i){
            if(i%j==0) continue;
            }
            else v.push_back(i);
        }
    }
}
void main(){
    int m;
    cin>>m;
    vector<int>n;
    sushu(n,m);
    for(int i=0;i<n.size();++i){
        for(int j=i;j<n.size();++j){
            if(m==n[i]*n[j+1])
                    cout<<m<<"is a bicat"<<n[i]<<" "<<n[j+1]<<endl;
            if(m<n[i]*n[j+1])
            break ;
        }
    }
}

9 楼

去看我的Blog吧,有更加好的算法。

我来回复

您尚未登录,请登录后再回复。点此登录或注册