zoukankan      html  css  js  c++  java
  • CodeForces

    A number is called almost prime if it has exactly two distinct prime divisors. For example, numbers 6, 18, 24 are almost prime, while 4, 8, 9, 42 are not. Find the amount of almost prime numbers which are between 1 and n, inclusive.

    Input

    Input contains one integer number n (1 ≤ n ≤ 3000).

    Output

    Output the amount of almost prime numbers between 1 and n, inclusive.

    Examples Input

    10

    Output

    2

    Input

    21

    Output

    8

    如果数字恰好具有两个不同的素数除数,则称为几乎素数。 例如,数字6、18、24几乎是质数,而数字4、8、9、42不是。 找出介于1和n之间(含1和n)的几乎质数的数量。

    输入值
    输入包含一个整数n(1≤n≤3000)。

    输出量
    输出1到n之间(含1和n)的几乎质数的数量。

    例子
    输入
    10
    输出
    2
    输入
    21
    输出
    8

    这道是CF上的题目,我选择了用打表+set做的,题意是输出1-n中几乎质数的数量,几乎质数就是有两个不同质数的除数,即有两个不同的质因子,这里开一个前缀和数组sum,下标存放的是1-i的几乎质数的个数,因为集合的去重性,用集合才存储不同的质因子,一旦szie等于2则说明该数是几乎质数,数据最大到3000,最后打表直接输出sum[n]的值即可。AC代码

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <set>
    #include <cstring>
    using namespace std;
    const int _max=3e3+50;
    int sum[_max]={0};//前缀和数组
    int main()
    {
    	bool check(int);
    	for(int i=1;i<=3000;i++)
    	{
    		if(check(i))//判断一下这个数是不是几乎质数
    		  sum[i]=sum[i-1]+1;
    		else
    		  sum[i]=sum[i-1];  
    	}
    	int n;
    	cin>>n;
    	cout<<sum[n]<<endl;
    	return 0;
    }
    bool check(int s)
    {
    	set<int >beg;
    	for(int i=2;i*i<=s;i++)//分解质因子的过程
    	  while(s%i==0)
    	  {
    	  	beg.insert(i);
    	  	s/=i;
    	  }
    	if(s!=1)
    	  beg.insert(s);
    	if(beg.size()==2)//等于2则返回true
    	  return true;
    	return false;    
    }
    
  • 相关阅读:
    Autofac
    MYSQL存储过程获取记录总数
    MYSQL通用存储过程
    判断用户用手机访问还是用电脑访问网页
    HttpRuntime.Cache与HttpContext.Current.Cache
    Eclipse之NDK编译-- Type 'jint' could not be resolved, and JNIEnv, jclass错误解决办法
    解决Android adjustresize全屏无效问题
    Android手机使用广播监听手机收到的短信
    使用Jackson解析首字母大写的json字符串
    Android Studio中设置提示函数用法
  • 原文地址:https://www.cnblogs.com/Hayasaka/p/14294324.html
Copyright © 2011-2022 走看看