수론 + 이산 화 - 슈퍼 파워 - UVA 11752
제목:
만약 에 하나의 수가 두 개의 서로 다른 정수 의 멱 으로 바 뀔 수 있다 면 이 수 는 하나의 수가 두 개의 서로 다른 정수 의 멱 으로 바 뀔 수 있다 면 이 수 는 하나의 수가 두 개의 서로 다른 정수 의 멱 으로 바 뀔 수 있다 면 이 수 를 The Super Power Numbers 라 고 부른다.
예 를 들 어 64 = 82 = 43 예 를 들 면 64 = 8 ^ 2 = 4 ^ 3 예 를 들 면 64 = 82 = 43
출력 [1, 2 64 − 1] 이내 의 모든 S u p e r P o w e r N u m b e r s 출력 [1, 2 ^ {64} - 1] 이내 의 모든 Super \ Power \ \ Numbers 출력 [1, 264 − 1] 이내 의 모든 Super Power Numbers
Sample Input
Sample Output
1
16
64
81
256
512
.
.
.
분석:
정수 X = P k 를 가정 하고 X 가 S u p e 라면 P o w e r N u m b e r s, X = P 1 k 1 k 가 있어 야 합 니 다. 정수 X = P ^ {k} 을 가정 하면 X 가 슈퍼 \ Power \ Numbers 라면 X = P 가 있어 야 합 니 다.1 ^ {k 1k}, 정수 X = Pk 를 가정 하고 X 가 Super 라면 Power Numbers, X = P1k 1 k 가 있어 야 합 니 다.
그 중 P = P 1 k 1, 그리고 k 1 ≥ 2 그 중 P = P1 ^ {k 1}, 그리고 k1 \ \ ge 2 중 P = P1k 1, 그리고 k1 ≥ 2
이것 은 k 가 2 보다 큰 합 수 라 는 것 을 의미한다.이것 은 k 가 2 보다 큰 합 수 라 는 것 을 의미한다.이것 은 k 가 2 보다 큰 합 수 라 는 것 을 의미한다.
그리고 k 의 상 계 는 64 이 고 하 계 는 4 이다.그리고 k 의 상 계 는 64 이 고 하 계 는 4 이다.그리고 k 의 상 계 는 64 이 고 하 계 는 4 이다.
따라서 우 리 는 폭력 적 으로 (264 − 1) 14, 지수 64 까지 셀 수 있 고 판단 하면 된다.따라서 우 리 는 폭력 적 으로 (2 ^ {64} - 1) ^ {\ frac {1} {4}} 까지 셀 수 있 습 니 다. 지수 가 64 가 되면 판단 하면 됩 니 다.따라서 우 리 는 폭력 적 으로 (264 − 1) 41, 지수 64 까지 셀 수 있 고 판단 하면 된다.
조건 에 맞 는 모든 수 를 저장 하고 정렬 한 다음 에 무 게 를 판정 하고 마지막 에 출력 합 니 다.조건 에 맞 는 모든 수 를 저장 하고 정렬 한 다음 에 무 게 를 판정 하고 마지막 에 출력 합 니 다.조건 에 맞 는 모든 수 를 저장 하고 정렬 한 다음 에 무 게 를 판정 하고 마지막 에 출력 합 니 다.
주의:
경계 위 치 는 매 거 지수 가 있 을 때 u l 이 터 질 수 있 으 므 로 각별히 주의해 야 한다.경계 위 치 는 매 거 지수 가 터 질 수 있 으 니 각별히 주의해 야 한다.경계 위 치 는 매 거 지수 가 터 질 수 있 으 니 각별히 주의해 야 한다.
해결 방안 은 x i > i n f 에서 종료 합 니 다. 넘 침 을 방지 하기 위해 서 는 이전 순환 에서 x i > i n f / x 에서 미리 종료 할 수 있 습 니 다.해결 방안 은 x ^ i > inf 시 종료 합 니 다. 넘 침 을 방지 하기 위해 서 는 이전 순환 에서 x ^ i > inf / x 시 미리 종료 할 수 있 습 니 다.해결 방안 은 xi > inf 시 종료 합 니 다. 넘 치 는 것 을 방지 하기 위해 서 는 이전 순환 에서 xi > inf / x 시 미리 종료 할 수 있 습 니 다.
코드:
#include
#include
#include
#include
#include
#define ull unsigned long long
using namespace std;
const int N=100010;
const ull inf=(1<<64)-1;
ull ans[N], idx;
bool check(int x)
{
for(int i=2;i<=x/i;i++)
if(x%i==0)
return false;
return true;
}
void cal(ull x)
{
ull tmp=1;
for(int i=1;i<=64;i++)
{
tmp*=x;
if(!check(i)) ans[idx++]=tmp;
if(tmp>inf/x) break;
}
}
int main()
{
ans[idx++]=1;
for(int i=2;i<=65536;i++) cal(i);
sort(ans,ans+idx);
int n=unique(ans,ans+idx)-ans;
for(int i=0;i<n;i++) printf("%llu
",ans[i]);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[HDU 5608] functionProblem Description There is a function f(x),which is defined on the natural numbers set N,satisfies the following eqaut...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.