zoukankan      html  css  js  c++  java
  • D

    - 题目大意

         给出一个n,求从1~n中任意两个数互质的对数为多少,(a,b)和(b,a)算两对。

    - 解题思路

        构造一个欧拉函数的方法,然后用一个数组去存储下标,因为(a,b)和(b,a)算两对,所以每一个都加两倍,但(1,1)很特殊,所以最后减一就行了。

    - 代码

    #include<iostream>
    #include<cmath>
    #include<cstring>
    using namespace std;
    const int MAX = 600000;
    
    int phi[MAX];
    void find()
    {
    	memset(phi, 0, sizeof(phi));
    	for (int i = 1; i < MAX; i++) phi[i] = i;
    	for (int i = 2; i < MAX; i++) {
    		if (phi[i] == i) {
    			for (int j = i; j < MAX; j += i) {
    				phi[j] = phi[j] / i * (i - 1);
    			}
    		}
    	}
    }
    int main()
    {
    	int x;
    	int q = 600;
    	find();
    	phi[1] = 1;
    	while (q--)
    	{
    		cin >> x;
    		long long sum = 0;
    		if (x == 0)
    			break;
            for (long long i = 1; i <= x; i++)
    				{
    					sum += phi[i];
    				}	
    	cout << 2*sum-1 << endl;
    	}
    return 0;
    }
    

      

  • 相关阅读:
    部分测试文档
    部分说明文档
    最终复审
    M2postmortem
    Beta版本发布说明
    M2项目测试
    Daily scrum 12.24
    Daily scrum 12.21
    Daily scrum 12.20
    个人阅读作业2
  • 原文地址:https://www.cnblogs.com/alpacadh/p/8448350.html
Copyright © 2011-2022 走看看