zoukankan      html  css  js  c++  java
  • 多功能欧拉筛

    用欧拉筛三合一

    v[i] 表示 i 的最小质因子
    f[i] 表示 i 是不是质数
    prime[i] 表示 第 i 个质数
    phi[i] 表示 i 的欧拉函数值

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int MAXN = 10000005;
    int init() {
    	int rv = 0, fh = 1;
    	char c = getchar();
    	while(c < '0' ||c > '9') {
    		if(c == '-') fh = -1;
    		c = getchar();
    	}
    	while(c >= '0' && c <= '9') {
    		rv = (rv<<1) + (rv<<3) + c - '0';
    		c = getchar();
    	}
    	return fh * rv;
    }
    int n, m, v[MAXN], prime[MAXN], cnt, phi[MAXN];
    bool f[MAXN];
    void Euler_chk(){
    	f[1] = 1;v[1] = 1;
    	for(int i = 2 ; i <= n ; i++) {
    		if(!f[i]) {
    			v[i] = i;
    			prime[++cnt] = i;
    			phi[i] = i - 1;
    		}
    		for(int j = 1; i * prime[j] <= n; j++) {
    			f[i * prime[j]] = 1;
    			v[i * prime[j]] = prime[j];
    			if(!(i%prime[j])) {
    				phi[i * prime[j]] = phi[i] * prime[j];
    				break;
    			}
    			phi[i * prime[j]] = phi[i] * (prime[j] - 1);
    		}
    	}
    }
    int main() {
    	n = init(); m = init();
    	Euler_chk();
    	for(int i = 1 ; i <= n ; i++) printf("%d %d
    ", i, phi[i]);
    	for(int i = 1; i <= m ; i++) {
    		if(f[init()]) printf("No
    ");
    		else printf("Yes
    ");
    	}
    	return 0;
    }
    
  • 相关阅读:
    firstResponder
    形而上学
    du -h
    数据本地存贮与数据结构(对象)
    RFC
    oc语言源代码
    HTTP1.1协议中文版-RFC2616
    如何提高团队协作的效率
    iOS应用架构谈 开篇
    nginx版本如何选择?
  • 原文地址:https://www.cnblogs.com/Mr-WolframsMgcBox/p/8515238.html
Copyright © 2011-2022 走看看