杭电acm 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,使得表达式都能整除65.

自己的做法是在一定范围内去找,1-10000之间找到当x=1时能够整除65的,然后在这基础上让x在1-10000之间去循环整除,如果能满足所有条件那么就找到了这个最小的a。否则就输出no。程序如下,已经AC....

 1 /*******************************************************
 2 杭电acm  1098 已经AC
 3 *******************************************************/
 4 
 5 #include <iostream>
 6 #include <cmath>
 7 #define fx 5*pow(x,13)+13*pow(x,5)+k*a*x
 8 using namespace std;
 9 
10 int main(void)
11 {
12     int x=1;
13     int k;
14     int a=1;
15     //long int fx;
16     int mark=1;
17     int flag=0;
18     while(scanf("%d",&k)!=EOF)
19     {
20         mark=1;
21         flag=0;
22         //fx=5*pow(x,13)+13*pow(x,5)+k*a*x;
23         for(a=1;a<10000;a++)
24         {
25             if((18+k*a)%65==0)
26             {
27                 for(x=1;x<1000;x++)
28                 {
29                     if(fx%65==0)
30                         continue;
31                     else {break;mark=0;}
32                 }
33 
34             }
35             if(((18+k*a)%65==0)&&mark==1)
36             {flag=1;break;}
37         }
38         if(mark&&flag)
39         {
40             cout<<a<<endl;
41         }
42         else cout<<"no"<<endl;
43 
44     }
45     return 0;
46 }

 

posted on 2014-04-22 14:01  笑侃码农  阅读(598)  评论(0编辑  收藏  举报