(Problem 70)Totient permutation
7356 단어 IE
Interestingly, φ(87109)=79180, and it can be seen that 87109 is a permutation of 79180.
Find the value of n, 1 n 107, for which φ(n) is a permutation of n and the ratio n/φ(n) produces a minimum.
제목 대의:
오라 함수φ(n) (때로는phi 함수라고도 부른다) n보다 작은 숫자에서 n과 상호작용하는 숫자의 개수를 계산할 수 있다.예를 들어 1,2,4,5,7,8은 모두 9보다 작고 9와 상호작용하기 때문에φ(9)=6.
숫자 1은 모든 정수와 상호작용한다고 여겨지기 때문에φ(1)=1.
재미있는 것은,φ(87109) = 79180, 87109가 79180의 배열임을 알 수 있다.
1 n 107 및φ(n)은 n의 배열된 n들 중에서 n/φ(n) 가장 작은 n을 찾으면 얼마입니까?
//(Problem 70)Totient permutation
// Completed on Tue, 18 Feb 2014, 11:06
// Language: C11
//
// (C)acutus (mail: [email protected])
// :http://www.cnblogs.com/acutus/
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<stdbool.h>
#define N 10000000
int phi[N]; //
int cmp(const void * a, const void * b)
{
return (*(char *)a - *(char *)b);
}
void genPhi(int n)// n (n-1 )
{
int i, j, pNum = 0 ;
memset(phi, 0, sizeof(phi)) ;
phi[1] = 1 ;
for(i = 2; i < n; i++)
{
if(!phi[i])
{
for(j = i; j < n; j += i)
{
if(!phi[j])
phi[j] = j;
phi[j] = phi[j] / i * (i - 1);
}
}
}
}
int fun(int n) // n
{
return (log10(n *1.0) + 1);
}
bool compare(int n, int m) //
{
int i, L1, L2;
char from[10], to[10];
sprintf(from, "%lld", m);
sprintf(to, "%lld", n);
L1 = strlen(from);
L2 = strlen(to);
qsort(from, L1, sizeof(from[0]), cmp);
qsort(to, L2, sizeof(to[0]), cmp);
return !strcmp(from, to);
}
void solve()
{
int i, j, count, k;
double min, t;
min = 10.0;
for(i = 2; i < N; i++) {
if((fun(i) == fun(phi[i])) && compare(i, phi[i])) {
t = i * 1.0 / phi[i];
if(t < min) {
min = t;
k = i;
}
}
}
printf("%d
", k);
}
int main()
{
genPhi(N);
solve();
return 0;
}
Answer:
8319823
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
KindEditor 4.1.2 ie6 loadScript bugKindEditor 버전 4.1.2 ie6 아래_loadScript 메소드 버그 소스 코드는 다음과 같습니다. 이 세그먼트 코드를 다음 코드로 변경하면 정상적으로 실행됩니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.