POJ 2109 :Power of Cryptography

Power of Cryptography

Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 18258   Accepted: 9208

Description

Current work in cryptography involves (among other things) large prime numbers and computing powers of numbers among these primes. Work in this area has resulted in the practical use of results from number theory and other branches of mathematics once considered
to be only of theoretical interest.

This problem involves the efficient computation of integer roots of numbers.

Given an integer n>=1 and an integer p>= 1 you have to write a program that determines the n th positive root of p. In this problem, given such integers n and p, p will always be of the form k to the nth. power, for an integer k (this integer is
what your program must find).

Input

The input consists of a sequence of integer pairs n and p with each integer on a line by itself. For all such pairs 1<=n<= 200, 1<=p<10101 and there exists an integer k, 1<=k<=109 such that kn = p.

Output

For each integer pair n and p the value k should be printed, i.e., the number k such that k n =p.

Sample Input

2 16
3 27
7 4357186184021382204544

Sample Output

4
3
1234

这题有多坑。。不想多说了。。开始被那101次方被吓尿了。。

还有坑爹的是我用G++提交就WA。。改C++就AC。。我真不知道怎么说才好。。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>

using namespace std;

int main()
{
    double n, m;
    while(scanf("%lf%lf", &n, &m)!=EOF)
    {
        printf("%.0lf\n",  pow(m, 1/n));
    }

    return 0;
}

注:这才是正常的吧。。。

#include<stdio.h>
#define N 1100
int n,a[N],k[10];
char p[N];
void pown()
{
    int i,j,g,b[N];
    for(i=1;i<N;i++)a[i]=0;
    a[0]=1;
    for(g=0;g<n;g++){
        for(i=0;i<N;i++){
            b[i]=a[i];
            a[i]=0;
        }
        for(i=0;i<N;i++)
            for(j=0;j<10;j++)
                a[i+j]+=b[i]*k[j];
        for(i=0;i<N-1;i++){
            a[i+1]+=a[i]/10;
            a[i]%=10;
        }
    }
}
int main()
{
    int i,j,t;
    while(~scanf("%d%s",&n,p)){
        for(i=0;i<10;i++)k[i]=0;
        for(t=0;p[t];t++)a[t]=p[t]-48;
        for(j=t;t<N;t++)p[t]=0;
        j--;
        for(i=0,t=j;i<t,j>=0;i++,j--)p[j]=a[i];//倒置p
        for(i=0;i<N;i++)a[i]=0;
        for(i=9;i>=0;i--){// 从最高到个位依次确定
            for(k[i]=9;k[i]>0;k[i]--){ //第i位上的值从9到0依次尝试
                pown();//求k的n次方
                for(j=N-1;j>0;j--)
                    if(a[j]!=p[j])break;
                if(a[j]<=p[j])break;
                //如果a(即此时的k^n值)小于等于p那么k的第i位值为当前值
            }
        }
        for(i=9;i>0;i--)
            if(k[i])break;
        for(;i>=0;i--)printf("%d",k[i]);
        puts("");
    }
    return 0;
}

POJ 2109 :Power of Cryptography

时间: 2024-07-30 23:54:59

POJ 2109 :Power of Cryptography的相关文章

POJ 1459:Power Network(最大流)

http://poj.org/problem?id=1459 题意:有np个发电站,nc个消费者,m条边,边有容量限制,发电站有产能上限,消费者有需求上限问最大流量. 思路:S和发电站相连,边权是产能上限,消费者和T相连,边权是需求上限,边的话就按题意加就好了.难点更觉得在于输入..加个空格..边数组要*2,因为有反向边. 1 #include <cstdio> 2 #include <algorithm> 3 #include <iostream> 4 #includ

Poj 2109 / OpenJudge 2109 Power of Cryptography

1.Link: http://poj.org/problem?id=2109 http://bailian.openjudge.cn/practice/2109/ 2.Content: Power of Cryptography Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 18872   Accepted: 9520 Description Current work in cryptography involves (

POJ_2109 Power of Cryptography 数学

题目链接:http://poj.org/problem?id=2109 参考链接:http://blog.csdn.net/synapse7/article/details/11672691 乍一看似乎高精度,但是double足矣.....15位有效数字, 指数范围-307~308(10位基数) 代码: 1 int main(){ 2 double n, p; 3 while(scanf("%lf %lf", &n, &p) == 2){ 4 double k = po

poj2109 Power of Cryptography(数学题)

题目链接:http://poj.org/problem?id=2109 Description Current work in cryptography involves (among other things) large prime numbers and computing powers of numbers among these primes. Work in this area has resulted in the practical use of results from num

Power of Cryptography(用double的泰勒公式可行分析)

Power of Cryptography Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=99&page=show_problem&problem=49 http://poj.org/problem?id=2109 Time Limit: 1000MS   Memory Limit: 30000K Total Su

poj2109(Power of Cryptography)

神水. 求n=log(k p)-> k=pow(p,1/n). G++和C++输出不同,编译器原因. 代码: 1 #include<cstdio> 2 #include<cmath> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 7 using namespace std; 8 9 int main() 10 { 11 double n,p; 12 whil

POJ 3761:Bubble Sort——组合数学

题目大意:众所周知冒泡排序算法多数情况下不能只扫描一遍就结束排序,而是要扫描好几遍.现在你的任务是求1~N的排列中,需要扫描K遍才能排好序的数列的个数模20100713.注意,不同于真正的冒泡排序算法,只要数列有序就立刻停止,而不用再检验一遍. 估计多数人都是找规律吧,先看出递推,然后求出通项……这个题只有找出通项公式才能通过,所以首先公布答案: K!((K + 1) ^ (N - K) - K ^ (N - K)) 好吧,现在让我们来证明一下. 首先定义函数d(x),对于1~N的一个排列,d(

POJ2109——Power of Cryptography

Power of Cryptography DescriptionCurrent work in cryptography involves (among other things) large prime numbers and computing powers of numbers among these primes. Work in this area has resulted in the practical use of results from number theory and

矩阵十点【两】 poj 1575 Tr A poj 3233 Matrix Power Series

poj 1575  Tr A 主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575 题目大意:A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. 数据的第一行是一个T,表示有T组数据. 每组数据的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9)两个数据.接下来有n行,每行有n个数据,每一个数据的范围是[0,9].表示方阵A的内容. 一个矩阵高速幂的裸题. 题解: #