hdu1098Ignatius's puzzle

Ignatius's puzzle

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 11549    Accepted Submission(s): 8107


http://acm.hdu.edu.cn/showproblem.php?pid=1098

Problem Description

Ignatius is poor at math,he falls across a puzzle problem,so he has no choice but to appeal to Eddy. this problem describes that:f(x)=5*x^13+13*x^5+k*a*x,input a nonegative integer k(k<10000),to find the minimal nonegative integer a,make the arbitrary integer x ,65|f(x)if
no exists that a,then print "no".
 

 

Input

The input contains several test cases. Each test case consists of a nonegative integer k, More details in the Sample Input.

 

Output

The output contains a string "no",if you can't find a,or you should output a line contains the a.More details in the Sample Output.

 

Sample Input

11

100

9999

 

Sample Output

22

no

43

题意:

给定一个k,找到最小的a 使得 f(x)=5*x^13+13*x^5+k*a*x ,f(x)%65永远等于0。

思路:

只要求出18+k*a能被65整除就可以了。

18+k*a=65*b

ax+by = c的方程有解的一个充要条件是:c%gcd(a, b) == 0

代码:

#include<iostream>
using namespace std;

int gcd(int a,int b)
{
    return a==0?b:gcd(b%a,a);
}

int main()
{
    int k,a;
    while(cin>>k)
    {
        if(18%gcd(65,k)==0)
        {
            for(a=0;;a++)
            {
                if((18+k*a)%65==0)
                {
                    cout<<a<<endl;
                    break;
                }
            }
        }
        else
            cout<<"no"<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sunny_hun/article/details/81456746
今日推荐