UVaOJ-10539-Almost Prime Numbers 解题报告
来源:互联网 发布:手机淘宝查号在哪里查 编辑:程序博客网 时间:2024/06/03 23:49
筛素数好题。题意:几乎是素数的数是这样一种数,它不是素数,但是它只有一个素因子。比如:4,8,9等。现在给你一个区间,让你统计区间内几乎是素数的数的个数。
我的解题思路:这个区间范围很大,右端点可以达到10的12次方。分析一下可以知道几乎是素数的数是素数的n次方(n > 2)。因此筛素数的范围到10的6次方就可以了。因为区间范围大,但是统计的数却不多,因此我们可以把最大范围内的几乎素数存起来,排序,然后根据输入的区间左右端点二分查找就可以了。
我的解题代码:
#include <cstdio>#include <cstdlib>#include <cstring>#include <cctype>#include <cmath>#include <algorithm>using namespace std;typedef long long Long;const int N = 1000002;const Long M = 1000000000001;bool isprime[N];Long primes[N], pn;Long num[N], nn;Long left, right;void InitRead();void DataProcess();void FastSieve(int maxn);int BinarySearch(Long key);bool Mycmp(Long a, Long b){ return a < b;}int main(){ int t; InitRead(); scanf("%d", &t); while (t--) { DataProcess(); } return 0;}void InitRead(){ memset(isprime, true, sizeof(isprime)); isprime[0] = isprime[1] = false; pn = nn = 0; FastSieve(N-1); for (int i=0; i<pn; ++i) { Long temp = primes[i] * primes[i]; while (temp < M) { num[nn++] = temp; temp *= primes[i]; } } sort(num, num+nn, Mycmp); return;}void DataProcess(){ scanf("%lld %lld", &left, &right); int l = BinarySearch(left), r = BinarySearch(right); if (num[l] == left) { printf("%d\n", r - l + 1); } else { printf("%d\n", r - l); } return;}void FastSieve(int maxn){ for (int i=2; i<=maxn; ++i) { if (isprime[i]) primes[pn++] = i; for (int j=0; j<pn; ++j) { if (i * primes[j] > maxn) break; isprime[i * primes[j]] = false; if (i % primes[j] == 0) break; } } return;}int BinarySearch(Long key){ if (key < 4) return -1; int low = 0, high = nn - 1, mid; while (low <= high) { mid = (high + low) >> 1; if (num[mid] == key) return mid; if (num[mid] > key) high = mid - 1; else low = mid + 1; } return num[mid] < key ? mid : mid - 1;}
0 0
- UVaOJ-10539-Almost Prime Numbers 解题报告
- 10539 - Almost Prime Numbers
- UVa 10539 - Almost Prime Numbers
- UVa 10539 - Almost Prime Numbers
- UVa 10539 - Almost Prime Numbers
- UVa 10539 - Almost Prime Numbers
- UVA 10539 Almost Prime Numbers
- Uva 10539 Almost Prime Numbers
- UVa 10539 Almost Prime Numbers
- UVA 10539 Almost Prime Numbers
- UVaOJ-10200-Prime Time 解题报告
- UVA 10539 - Almost Prime Numbers(数论)
- uva 10539 - Almost Prime Numbers(数论)
- uva 10539——Almost Prime Numbers
- UVA 10539(p343)----Almost Prime Numbers
- UVA 10539 Almost Prime Numbers( 素数因子)
- UVa10539 Almost Prime Numbers
- UVa10539 - Almost Prime Numbers
- js事件监听
- ps钢笔工具的详细讲解
- strncpy_s和_TRUNCATE
- 设为主页 加入收藏
- 学习【深入理解java虚拟机】三:自动装箱
- UVaOJ-10539-Almost Prime Numbers 解题报告
- Maven部署项目到Tomcat
- u3d 性能优化
- 获取本地ip
- 定期删除服务器日志
- 织梦dedecms实现自动登录的方法
- ubuntu永久修改主机名
- sublime 的安装
- Keil C51 Data Overlaying