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".
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 }