UVA - 10699 - Count the factors(分解素因数)
2017-09-30 11:38
351 查看
给出一个很大的数,然后判断素因数的个数,我们先打一个素数数组,里面全存的是素数;
然后注意判断是否可以被整除,如果可以就一口气除到不能除尽为止,然后换下一个素数,继续上述操作;
然后注意判断是否可以被整除,如果可以就一口气除到不能除尽为止,然后换下一个素数,继续上述操作;
#include<iostream> #include<cstring> #include<cmath> #define MAXN 1000005 #define ll long long using namespace std; bool isprime[MAXN]; int prime[MAXN]; int num = 1; int getprime(int n) {//存入isprime数组中 memset(isprime, true, sizeof(isprime)); prime[num++] = 2; isprime[0] = isprime[1] = false; for(int i = 3; i <= n; i+=2) { if(isprime[i]) { prime[num++] = i; for(int j=i+i; j <= n; j+=i) { isprime[j] = false; } } } } int main() { ll n; getprime(MAXN); while(cin >> n && n) { int x = n; int i = 1, ans = 0, flag; for(;;) { flag = 0; while(x % prime[i] == 0) {//除尽为止 x /= prime[i]; flag = 1;//标记曾经除过, } if(flag) ans++; i++;//除完需要换下一个素数 if(x == 1 || i >= num) break;//结束的 4000 条件就是本身变成了1,或者超过了最大的素数。 } printf("%d : %d\n", n, ans); } return 0; }
相关文章推荐
- UVa 10699 - Count the factors
- UVA10699 Count the factors【素数因子个数+筛选法】
- 10699 - Count the factors
- uva 357 let me count the ways
- UVA - 10007 Count the Trees
- UVA - 357 Let Me Count The Ways(完全背包)
- UVALive 6663 Count the Regions (离散化,染色,dfs)
- UVa 10007 - Count the Trees
- UVALive 6663 Count the Regions --离散化+DFS染色
- UVA 357 Let Me Count The Ways 完全背包
- UVA 357 - Let Me Count The Ways
- UVA 357 Let Me Count The Ways Problem(动态规划 硬币)
- uva 357 - Let Me Count The Ways
- UVA - 357 Let Me Count The Ways
- UVa 357 - Let Me Count The Ways
- uva 10007 Count the Trees
- uva 357 Let Me Count The Ways
- uva 357 Let Me Count The Ways(01背包)
- uva 357 Let Me Count The Ways
- UVa 357 - Let Me Count The Ways