POJ 2407-Relatives (欧拉函数)

xiaoxiao2021-02-28  72

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other)
Total Submission(s) : 4   Accepted Submission(s) : 4
Problem Description Given n, a positive integer, how many positive integers less than n are relatively prime to n? Two integers a and b are relatively prime if there are no integers x > 1, y > 0, z > 0 such that a = xy and b = xz.    Input There are several test cases. For each test case, standard input contains a line with n <= 1,000,000,000. A line containing 0 follows the last case.    Output For each test case there should be single line of output answering the question posed above.   Sample Input 7 12 0   Sample Output 6 4   求小于等于n且与n互质的数 定理: 设A, B, C是跟m, n, mn互质的数的集,据中国 剩余定理,A*B和C可建立一一对应的关系。因此φ(n)的值使用 算术基本定理便知, 若   则   例如   与欧拉定理、 费马小定理的关系 对任何两个互质的正整数a, m(m>=2)有 即欧拉定理 当m是质数p时,此式则为: 即费马小定理。 代码按照定理来写的(不能用线性筛因为复杂度1e9 #include <iostream> #include <string> #include <string.h> #include <algorithm> #include <cmath> #include <vector> #include <stdio.h> #include <stack> using namespace std; int eular(int num) { int ans = 1; for (int i = 2; i * i <= num; ++i) { if (num % i == 0) { num /= i; ans *= i - 1; while (num % i == 0) { num /= i; ans *= i; } } } if (num > 1) ans *= (num - 1); return ans; } int main() { //freopen("1.txt", "r", stdin); int n; while (cin >> n && n) { cout << eular(n) << endl; } }
转载请注明原文地址: https://www.6miu.com/read-79438.html

最新回复(0)