JAG Asia 2017 C-----Prime-Factor Prime(素数区间筛)
时间:2019-08-20
本文章向大家介绍JAG Asia 2017 C-----Prime-Factor Prime(素数区间筛),主要包括JAG Asia 2017 C-----Prime-Factor Prime(素数区间筛)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
C: Prime-Factor Prime
时间限制: 1 Sec 内存限制: 128 MB题目描述
A positive integer is called a "prime-factor prime" when the number of its prime factors is prime. For example, 12 is a prime-factor prime because the number of prime factors of 12=2×2×3 is 3, which is prime. On the other hand, 210 is not a prime-factor prime because the number of prime factors of 210=2×3×5×7 is 4, which is a composite number.
In this problem, you are given an integer interval [l,r]. Your task is to write a program which counts the number of prime-factor prime numbers in the interval, i.e. the number of prime-factor prime numbers between l and r, inclusive.
In this problem, you are given an integer interval [l,r]. Your task is to write a program which counts the number of prime-factor prime numbers in the interval, i.e. the number of prime-factor prime numbers between l and r, inclusive.
输入
The input consists of a single test case formatted as follows.
l r
A line contains two integers l and r (1≤l≤r≤109), which presents an integer interval [l,r]. You can assume that 0≤r−l<1,000,000.
l r
A line contains two integers l and r (1≤l≤r≤109), which presents an integer interval [l,r]. You can assume that 0≤r−l<1,000,000.
输出
Print the number of prime-factor prime numbers in [l,r].
样例输入
1 9
样例输出
4
AC代码:
1 /* 2 *只有合数才可能满足题目要求 3 *任何一个合数n必定包含一个不超过sqrt(n)的素因子 4 */ 5 6 7 #include <bits/stdc++.h> 8 using namespace std; 9 typedef long long ll; 10 const int maxn=33000; 11 int prime[maxn+1]; 12 bool isPrime[maxn+1]; 13 void get_prime(int num) 14 { 15 memset(isPrime,false,sizeof(isPrime)); 16 memset(prime,0,sizeof(prime)); 17 for(int i=2; i<=num; ++i) 18 { 19 if(!prime[i])prime[++prime[0]]=i,isPrime[i]=true; 20 for(int j=1; j<=prime[0]&&prime[j]<=num/i; ++j) 21 { 22 prime[prime[j]*i]=1; 23 if(i%prime[j]==0)break; 24 } 25 } 26 } 27 int arr[1000007];//存区间数 28 int num[1000007];//存区间数的素因子个数 29 int main() 30 { 31 int a,b; 32 scanf("%d%d",&a,&b); 33 int len=b-a+1; 34 for(int i=1; i<=len; ++i) 35 { 36 arr[i]=a+i-1; 37 } 38 int m=sqrt(b); 39 get_prime(m); 40 int ans=0; 41 for(int i=1; i<=prime[0]; ++i) 42 { 43 int lef=ceil(a*1.0/prime[i]); 44 int rig=b*1.0/prime[i]; 45 for(int j=lef; j<=rig; ++j) 46 { 47 /* 48 *只有合数才可能满足题目要求 49 *j*prime[i]必为合数 50 */ 51 int pos=j*prime[i]-a+1; 52 while(arr[pos]%prime[i]==0) 53 { 54 arr[pos]/=prime[i]; 55 ++num[pos]; 56 } 57 } 58 } 59 // for(int i=1;i<=len;++i) 60 // { 61 // cout<<arr[i]<<endl; 62 // //if((arr[i]==1&&isPrime[num[i]])||(arr[i]>1&&isPrime[num[i]+1]))++ans; 63 // } 64 // system("pause"); 65 for(int i=1;i<=len;++i) 66 { 67 if((arr[i]==1&&isPrime[num[i]])||(arr[i]>1&&isPrime[num[i]+1]))++ans; 68 //arr[i]==1&&isPrime[num[i]] 的情况是素因子都小于sqrt(b) 69 //arr[i]>1&&isPrime[num[i]+1] 的情况就是有一个素因子是大于srtq(b)的,素因子个数直接加一就好了 70 } 71 printf("%d\n",ans); 72 return 0; 73 } 74 /* 75 1 9 76 77 78 100000000 101000000 79 */
原文地址:https://www.cnblogs.com/CharlieWade/p/11386053.html
- 妙趣横生的HTML5 Page Visibility API
- 禁止/移除 WordPress 4.2 中前台自动加载的 emjo 脚本
- 项目管理方面的几个.NET开源项目
- 如何向十岁以下的朋友解释编程?这个说法碉堡了!
- 快速比较和合并文件
- 前端页面中 iOS 版微信长按识别二维码的bug 与解决方案
- .NET Mass Downloader -整体下载.NET源码
- Android中Button
- Pycharm中一些不为人知的技巧
- Silverlight 2.0 beta1 堆栈
- 微信内置浏览器 长按识别二维码 功能的两三个坑与解决方案
- Android中EditText
- 比特币分叉了,这到底是怎么回事?
- Excel导入导出数据库01
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring框架源码分析(IoC):Resource、ResourceLoader和容器之间的关系
- Spring框架源码分析(IoC):BeanFactory和ApplicationContext容器家族
- spring框架通过xml以及注解方式注册BeanDefinition的流程全链路分析
- Java后端面试学习知识总结——GC
- Java后端面试学习知识总结——JVM
- Spring JDBC 框架,我的学习笔记
- 磁盘扩容
- 如何在MySQL中创建存储过程
- 磁盘扩容
- PyCharm安装疯狂打字机插件
- Java Lombok 常用注解
- Python 基础 安装 简单的输入输出 运行一个py程序
- Python 基础 数据类型 变量常量
- Java 快速排序 关于起始方向的选择问题 为什么一定要从右边开始
- Java 使用异或进行数组元素交换时的坑 返回0的原因